스택큐힙리스트

API 백엔드에서 AWS Cognito의 JWT를 검증하는 방법은 다음과 같습니다. 본문

카테고리 없음

API 백엔드에서 AWS Cognito의 JWT를 검증하는 방법은 다음과 같습니다.

스택큐힙리스트 2023. 12. 4. 16:19
반응형

저는 Angular2 단일 페이지 앱과 ECS에서 실행되는 REST API로 구성된 시스템을 구축하고 있습니다. API는 .Net/Nancy를 사용하여 실행되지만, 그것은 아마도 바뀔 수 있습니다.


Cognito를 사용해 보고 싶으며, 이것이 인증 워크플로우를 상상했던 방식입니다:



  1. SPA가 사용자를 로그인하고 JWT를 받습니다.

  2. SPA가 모든 요청과 함께 JWT를 REST API에 보냅니다.

  3. REST API가 JWT가 실제인지 확인합니다.


제 질문은 3단계에 관한 것입니다. 내 서버(또는 정확히 말해서 상태 없는, 자동 스케일링된, 부하 분산된 Docker 컨테이너)가 토큰이 실제인지 확인하는 방법은 무엇인가요? 서버 자체가 JWT를 발급하지 않았기 때문에, 기본 JWT 예제 여기에서 설명한 것처럼 자체 비밀을 사용할 수 없습니다.


저는 Cognito 문서를 읽고 많이 구글링했지만, 서버 측에서 JWT를 처리하는 좋은 가이드라인을 찾을 수 없습니다.

답변 1

결과적으로 문서를 제대로 읽지 않았습니다. 여기에서 설명되어 있습니다. (웹 API에서 ID 토큰 및 액세스 토큰 사용으로 스크롤하십시오).


API 서비스는 Cognito의 비밀을 다운로드하여 수신된 JWT를 확인하는 데 사용할 수 있습니다. 완벽합니다.


편집


@Groady의 댓글은 올바릅니다. 하지만 토큰을 어떻게 유효성을 검사합니까? 그렇다면 jose4j 또는 nimbus (둘 다 Java)와 같은 검증이 이미 구현된 라이브러리를 사용하는 것을 권장합니다.

여기는 작년에 자바/dropwizard 서비스에서 이를 구현해야 했을 때 저를 도와준 nimbus를 사용한 Spring Boot 예시 구현입니다.

답변 2

JWT는 사용자 인증을 위한 토큰으로 AWS Cognito에서 사용되는 일반적인 방법입니다. 이것은 간단한 방법으로 API 후단에서 JWT를 확인하는 방법에 대해 설명합니다.
AWS Cognito는 사용자 인증 및 접근 제어를 관리하기 위한 서비스입니다. 사용자가 로그인하면 Cognito는 JWT라는 JSON Web Token을 발행합니다. 이 JWT는 사용자 식별자와 기타 사용자에 대한 정보를 담고 있습니다. API 후단은 이 토큰을 사용하여 사용자의 요청이 인증된 것인지 확인해야 합니다.
먼저, API 후단은 JWT를 사용하여 AWS Cognito 서비스에 대한 인증을 요청해야 합니다. API는 클라이언트로부터 받은 JWT를 사용하여 Cognito 서비스에 대한 인증 토큰을 가져옵니다. 이를 통해 API는 Cognito에서 발행한 JWT를 검증할 수 있습니다.
JWT의 유효성을 검사하기 위해 API 후단은 여러 단계를 거칩니다. 먼저, JWT의 서명을 확인해야 합니다. 서명을 통해 JWT가 변경되지 않았음을 확인할 수 있습니다. 그런 다음 JWT의 유효한 기간을 확인합니다. JWT에는 발행 시간 및 만료 시간이 포함되어 있으며, API 후단은 현재 시간과 비교하여 유효한지 여부를 확인합니다.
또한, API 후단은 JWT의 발행자와 수신자를 확인합니다. 이는 사이트 또는 응용 프로그램에 대한 신뢰성을 보장하기 위해 중요합니다. JWT의 발행자와 수신자는 AWS Cognito 서비스와 API 후단간에 사전에 설정된 값이어야 합니다.
마지막으로, API 후단은 JWT의 클레임(claim)을 확인합니다. 클레임은 사용자의 정보를 포함하고 있으며, 이를 통해 사용자를 식별하여 요청을 처리할 수 있습니다. API 후단은 클레임 값을 신뢰할 수 있도록 JWT에서 검증해야 할 필수 정보를 확인합니다.
API 후단은 이러한 단계를 거친 후, JWT가 모든 검증 단계를 통과하면 사용자의 요청을 인증하고 처리합니다. 검증되지 않은 JWT는 거부되며, 사용자는 허용되지 않은 액세스로 간주됩니다.
이렇게 API 후단에서 JWT를 확인함으로써 AWS Cognito에서의 사용자 인증을 보장할 수 있습니다. JWT의 서명, 유효성, 발행자, 수신자, 클레임 등을 검사하는 과정을 거쳐 사용자가 유효한 요청을 보내는지 확인할 수 있습니다.

반응형
Comments