REST API 보안 : HMAC / 키 해싱 및 JWT


16

방금 몇 년 된 이 기사읽었 지만 REST API를 보호하는 영리한 방법을 설명합니다. 본질적으로 :

  • 각 클라이언트에는 고유 한 공개 / 개인 키 쌍이 있습니다
  • 클라이언트와 서버 만이 개인 키를 알고 있습니다. 그것은 와이어를 통해 전송되지 않습니다
  • 각 요청마다 클라이언트는 여러 입력 (전체 요청 자체, 현재 타임 스탬프 및 개인 키)을 가져와 HMAC 함수를 통해 실행하여 요청의 해시를 생성합니다.
  • 그런 다음 클라이언트는 일반 요청 (공개 키 포함)과 해시를 서버로 보냅니다.
  • 서버는 클라이언트의 개인 키를 제공하고 (제공된 공개 키를 기반으로) 요청이 재생 공격 의 희생자가 아닌지 확인하는 타임 스탬프 검사 (알지 못함)를 수행합니다.
  • 모든 것이 정상이면 서버는 개인 키와 동일한 HMAC 함수를 사용하여 요청의 자체 해시를 생성합니다.
  • 그런 다음 서버는 두 해시 (클라이언트가 보낸 것 및 생성 한 것)를 비교합니다. 일치하면 요청이 인증되고 진행이 허용됩니다.

그런 다음 JWT 를 우연히 발견했습니다 . 매우 비슷하게 들립니다. 그러나 첫 번째 기사에서는 JWT를 전혀 언급하지 않았으므로 JWT가 위의 인증 솔루션과 다른지 궁금하다면 어떻게 해야하는지 궁금합니다.


1
Lol .. 난 그냥 똑같은 질문을하고 싶었고 Stateless 인증에 대해 처음 발견 한 것 중 하나는 AWS ( docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/…) 에서 찾은 것 입니다. 이 massimilianosciacco.com/… 과 같은 것을 구현 했습니다 . 그런 다음 JWS / JWT를 찾았으며 어떻게 든 비슷합니다. 그러나 내가 이해하는 한 JWT는 표준이며 위에서 설명한 다른 솔루션은 일부 사용자 정의 구현입니다 (표준화되지 않음). 내가 틀렸다면 누군가 나를 교정합니다.
nyxz

2
알아두면 좋은 점은 이런 종류의 세부 사항에 대해 걱정하는 유일한 사람이 아닙니다! JWT는 확실히 비슷 하다고 느끼며 보너스는 표준화 된 것입니다. 이 맞춤형 HMAC 솔루션으로 어떻게 공정하게 보안을 유지하는지 궁금합니다.
smeeb

답변:


7

매우 기본적인 답변으로 시작하겠습니다.

JAuth (OAuth 및 OpenID의 컨텍스트에서 사용됨)에는 클라이언트와 API 간의 공유 비밀이 필요하지 않습니다. 클라이언트 <-> 식별 서버, 식별 서버 <-> API : 각각 3 개의 구성 요소와 2 개의 쌍이 각각 비밀을 공유합니다.

이것은 API에서 식별 서버로 대부분의 복잡성을 이동시킵니다. API는 토큰이 식별 서버에 의해 발행되었고 템퍼링되지 않았는지 확인하기 만하면됩니다. API가 식별 서버와 API 사이의 알려진 단일 공유 비밀번호로 JWT 서명이 유효한지 확인합니다. 그게 다야!

식별 서버가 사용자 ID를 확인하는 방법은 다양 할 수 있지만 (많은 경우 TLS 연결을 통한 이전 사용자 이름과 비밀번호 쌍임) API에는 영향을 미치지 않습니다.

JWT를 사용할 때 메시지의 개인 정보 보호 및 보안 및 토큰 자체는 TLS에서 처리되며 JWT는 이러한 문제를 무시합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.