Medium - 3 Ways to Secure Your Web API for Different Situations

원문 - Jeffrey Lewis

Trend 파악을 위한 Medium 기고문 포스팅 - 여러분의 웹 API를 다양한 상황에 대해 보안하는 3가지 방법

Image by Pixabay via Pexels

보안은 모든 소프트웨어 개발에 매우 중요한 부분이고 API 또한 예외가 아닙니다. 퍼블릭 API라도 여러분의 서비스에 접근하여 제어를 할 수 있도록 하는 것은 일반적인 비즈니스 요구사항입니다. 웹 API가 근본적으로 stateless 하기 때문에 보안의 맥락은 서버 세션에 달려있습니다. API에 요청되는 각 리퀘스트는 반드시 서버에게 유효한 특졍 형태의 보안정보를 가지고 있어야 합니다.

다음은 여러분의 웹 API 보안을 유지하는 세가지 일반적인 방법입니다.

여기서 기술적으로 논의되는 것은 인증과 허가입니다(Authentication, authorization 그리고 메시지 암호화는 하지 않을 것입니다. 메시지 암호화는 주로 클라이언트와 서버가 공유하는 HTTPS 프로토콜에서 처리됩니다.

HMAC Authentication

이 보안메커니즘은 퍼블릭 API에서 일반적으로 쓰이며 상대적으로 구현하기가 쉽습니다. 여러분의 서비스에 접근해야하는 클라이언트나 응용프로그램은 API 키와 비밀키가 필요합니다. 이런 키들은 대개 랜덤하게 생성된 문자열이며 사전에 클라이언트에게 주어집니다. API 키들은 클라이언트/응용프로그램마다 유니크하며 클라이언트와 서버 둘다 API 키와 비밀키를 가지고 있을 것입니다.

클라이언트가 API 콜을 하면 메시지 내용이 비밀키를 사용하여 해싱되고 HMAC 서명을 만듭니다. 이 값과 원본 메시지와 API키가 서버의 API로 전달됩니다. 서버에서는 같은 절차를 반복하지만 클라이언트가 보낸 API 키와 일치하는 저장된 시크릿 키를 찾아서 프로세스를 진행합니다. 생성된 HMAC 인증서는 클라이언트가 보낸 것과 비교합니다. 해당 HMAC 인증서가 일치할 때 리퀘스트는 허가됩니다.

퍼블릭 API를 가지고 있고 누가 API에 접근할 수 있는지 제어하고 싶을 때 사용합니다.

Digital Signature

비공개-공개 키페어를 이용하는 전자 서명은 서버와 서버사이의 통신을 보안할 때 유용한 메커니즘입니다. 일치하는 공개키를 사용해서 검증할 수 있는 보안 시그니쳐를 생성학 위해 메시지 내용에 비공개 키로 서명을 합니다. 클라이언트는 자신의 공개키를 서버에 제공합니다. 그런 다음 각 서버에서 만들어지는 리퀘스트는 비공개 키를 이용하여 메시지 내용에 서명을 합니다. 이것은 서버가 클라이언트의 비공개키를 알지 못해도 메시지 인증을 할 수 있도록 합니다.

HMAC 기법과 다른 점은 서버와 클라이언트가 비밀키를 공유하지 않기 때문에 양쪽 파티 모두 다른 쪽으로 위장할 수 없습니다. 중요한 점은 비공개 키는 비공개라는 이름처럼 소유자에 의해 비공개로 유지되어야 합니다. 클라이언트는 비공개키를 가지고 메시지에 서명을 합니다. 서버는 공개키(인증서)를 가지고 메시지 서명을 검증합니다.

two way 통신에 있어서 양쪽 서버는 자신의 비공개 키를 가지고 있고 서로 공개키를 주고 받을 것입니다. 서버사이의 통신이나 two-way 통신이 필요할 때 사용합니다.

OAuth

OAuth는 유저 인증 과정에 있어서 매우 폭넓게 사용되는 보안 메커니즘입니다. 로그인된 세션이 웹사이트에서 동작하는 것과 비슷하게 OAuth는 클라이언트 사용자에게 Web API에 로그인을 하도록 요구하고 그 다음 나머지 서비스에 접근할 수 있습니다.

이것은 로그인 절차에 하나의 엔드포인트만 노출하게 됩니다. 클라이언트는 사용자가 서버에서 인증될 수 있는 API에게 유저 크리덴셜을 보냅니다. 한번 인증이 되면 보안 토큰이 생성되고 서버에 저장되며 클라이언트에게 보내집니다.

클라이언트는 이 토큰을 API에게 보내 제한된 엔드포인트에 접근할 수 있습니다. 토큰은 서버측에서 유효성을 검증합니다. 해당 기법은 인증된 사용자만 사용할 수 있도록 API 일부분을 제한하고 싶을 때 사용합니다.

Conclusion

여기에 있는 세가지 보안기법들은 산업의 표준으로써 다양한 상황에 사용되고 있습니다. HMAC 인증은 퍼블릭 API들을 지키는 데 일반적으로 사용되고 전자 서명은 서버와 서버 사이의 양방향 통신에 적합합니다. OAuth는 API의 일부를 인증된 사용자들에게만 사용할 수 있도록 제한하고 싶을 떄 유용합니다.

Summary

  • HMAC - 비공개 키를 사용, 퍼블릭 API에 주로 사용
  • Digital Signature - 비공개-공개 키페어를 이용하는 메커니즘이며 메시지를 검증할 수 있는 공개키를 서로 주고받고 자신이 소유한 비공개 키로 서명을 해서 보냅니다. 서명된 메시지는 공개키르 이용해 확인할 수 있습니다.
  • OAuth - 로그인을 할 수 있는 API 엔드포인트를 열어놓고 사용자가 로그인하면 토큰을 생성함, 사용자는 토큰을 통해 나머지 API 들에 접근가능함

© 2019. All rights reserved.

Powered by Hydejack v8.1.1