기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
JSON웹 토큰 확인
이 단계에서는 사용자 풀 JSON 웹 토큰 (JWT) 확인에 대해 설명합니다.
사전 조건
라이브러리 또는 소프트웨어 프레임워크가 이 섹션의 작업을 이미 처리하고 있을 수 있습니다. SDK AWS SDKs앱에서 Amazon Cognito 사용자 풀 토큰 처리 및 관리를 위한 도구를 제공합니다. AWS Amplify Amazon Cognito 토큰을 검색하고 새로 고치는 함수를 포함합니다.
자세한 내용은 다음 페이지를 참조하십시오.
-
Amplify 개발 센터의 Advanced workflows
(고급 워크플로)
JSON웹 토큰 () 을 디코딩하고 검증하는 데 사용할 수 있는 라이브러리가 많이 있습니다. JWT 서버 측 API 처리를 위해 토큰을 수동으로 처리하려는 경우 또는 다른 프로그래밍 언어를 사용하는 경우 이러한 라이브러리가 도움이 될 수 있습니다. 토큰 작업에 대한 OpenID 기초 라이브러리 목록을
다음을 사용하여 토큰을 검증합니다. aws-jwt-verify
Node.js 앱에서는 aws-jwt-verify라이브러리가aws-jwt-verify
를 사용하면 하나 이상의 사용자 풀에 대해 확인하려는 클레임 값으로 CognitoJwtVerifier
를 채울 수 있습니다. 확인할 수 있는 값에는 다음이 포함됩니다.
-
액세스 또는 ID 토큰의 형식이 잘못되었거나 만료되지 않았으며 유효한 서명이 있음
-
액세스 토큰이 올바른 사용자 풀과 앱 클라이언트
에서 제공됨 -
해당 액세스 토큰 클레임에는 올바른 OAuth 2.0 범위가
포함되어 있습니다. -
액세스에 서명한 키와 ID 토큰이 사용자 JWKSURI풀의 서명 키와
kid
일치하는지 확인하십시오. JWKSURI에는 사용자 토큰에 서명한 개인 키에 대한 공개 정보가 들어 있습니다. 에서 JWKS URI 사용자 풀을 찾을 수
https://cognito-idp.
있습니다.<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.json
Node.js 앱 또는 AWS Lambda
권한 부여자에서 사용할 수 있는 자세한 내용 및 예제 코드는 aws-jwt-verify
토큰 이해 및 검사
토큰 검사를 앱과 통합하기 전에 Amazon Cognito가 어떻게 조합되는지 생각해 보세요. JWTs 사용자 풀에서 예시 토큰을 검색하세요. 디코딩하고 자세히 검사하여 특성을 이해하고 언제 무엇을 검증할지 결정하세요. 예를 들어 한 시나리오에서는 그룹 멤버십을 검사하고 또 다른 시나리오에서는 범위를 검사할 수 있습니다.
다음 섹션에서는 앱을 JWTs 준비하면서 Amazon Cognito를 수동으로 검사하는 프로세스를 설명합니다.
의 구조를 확인하십시오. JWT
JSON웹 토큰 (JWT) 에는 세 개의 섹션과 두 섹션 사이에 .
(점) 구분 기호가 있습니다.
- 헤더
-
Amazon Cognito가 토큰에 서명하는 데 사용한 키 ID 및 RSA 알고리즘.
kid
alg
Amazon Cognito는RS256
이라는alg
로 토큰을 서명합니다. 사용자kid
풀이 보유한 2048비트 RSA 개인 서명 키에 대한 잘린 참조입니다. - 페이로드
-
토큰 클레임입니다. ID 토큰의 클레임에는 사용자 속성 및 사용자 풀(
iss
), 앱 클라이언트(aud
)에 대한 정보가 포함됩니다. 액세스 토큰의 페이로드에는 범위, 그룹 멤버십과 포함되며 사용자 풀이iss
로, 앱 클라이언트가client_id
로 포함됩니다. - Signature
-
서명은 헤더 및 페이로드와 같이 디코딩할 수 있는 base64가 아닙니다. 서명 키와 매개 변수에서 파생된 RSA256 식별자로, 사용자가 직접 확인할 수 있습니다. JWKS URI
헤더와 페이로드는 base64로 JSON 인코딩됩니다. 시작 문자 {
로 디코딩되는 시작 문자 eyJ
로 알 수 있습니다. 사용자가 base64로 인코딩된 JWT 형식을 앱에 제시하고 해당 [JSON
Header].[JSON Payload].[Signature]
형식이 아닌 경우 이는 유효한 Amazon Cognito 토큰이 아니므로 폐기해도 됩니다.
유효성을 검사하십시오. JWT
JWT서명은 헤더와 페이로드의 해시 조합입니다. Amazon Cognito는 각 사용자 풀에 대해 두 쌍의 RSA 암호화 키를 생성합니다. 하나의 프라이빗 키는 액세스 토큰을 서명하고 다른 하나는 ID 토큰을 서명합니다.
토큰의 서명을 확인하려면 JWT
-
ID 토큰을 디코딩합니다.
OpenID 재단은 또한 토큰 작업을 위한 라이브러리 목록을 유지 관리합니다
. JWT 사용자 풀을 AWS Lambda 디코딩하는 데도 사용할 수 있습니다. JWTs 자세한 내용은 를 사용하여 Amazon JWT Cognito 토큰 디코딩 및 확인을
참조하십시오. AWS Lambda -
로컬 키 ID(
kid
)를 퍼블릭kid
와 비교합니다.-
사용자 풀에 해당하는 퍼블릭 JSON 웹 키 (JWK) 를 다운로드하고 저장합니다. JSON웹 키 세트 (JWKS) 의 일부로 제공됩니다. 환경에
jwks_uri
URI 맞게 다음을 구성하여 찾을 수 있습니다.https://cognito-idp.
<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.jsonJWK및 JWK 세트에 대한 자세한 내용은 JSON웹 키 (JWK)
를 참조하십시오. 참고
Amazon Cognito는 사용자 풀의 서명 키를 교체할 수 있습니다. 가장 좋은 방법은
kid
를 캐시 키로 사용하여 앱에서 퍼블릭 키를 캐시하고 주기적으로 캐시를 새로 고치는 것입니다. 앱에서 받는 토큰의kid
를 캐시와 비교합니다.발급자는 올바르지만
kid
가 다른 토큰을 받은 경우 Amazon Cognito가 서명 키를 교체했을 수 있습니다. 사용자 풀jwks_uri
엔드포인트에서 캐시를 새로 고칩니다.다음은 샘플
jwks.json
파일입니다.{ "keys": [{ "kid": "1234example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "1234567890", "use": "sig" }, { "kid": "5678example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "987654321", "use": "sig" }] }
- 키 ID(
kid
) -
토큰의
kid
JSON 웹 서명 (JWS) 을 보호하는 데 사용된 키를 나타내는 힌트입니다. - 알고리즘(
alg
) -
alg
헤더 파라미터는 ID 토큰을 보호하는 데 사용되는 암호화 알고리즘을 나타냅니다. 사용자 풀은 -256의 RSA 서명인 RS256 암호화 알고리즘을 사용합니다. SHA 에 대한 자세한 내용은 암호화를 참조하십시오. RSA RSA - 키 유형(
kty
) -
kty
파라미터는 키와 함께 사용되는 암호화 알고리즘 패밀리를 식별합니다 (예: 이 예제에서는 RSA "“). - RSA지수 ()
e
-
e
파라미터는 퍼블릭 키의 지수 값을 포함합니다. RSA 이는 Base64로 urlUInt 인코딩된 값으로 표시됩니다. - RSA모듈러스 ()
n
-
n
파라미터는 RSA 퍼블릭 키의 모듈러스 값을 포함합니다. 이는 Base64로 urlUInt 인코딩된 값으로 표시됩니다. - 사용(
use
) -
use
파라미터는 퍼블릭 키의 용도를 설명합니다. 이 예제에서use
값sig
는 서명을 나타냅니다.
- 키 ID(
-
공개 JSON 웹 키에서 내 키와
kid
일치하는 키를 검색하십시오.kid
JWT
-
-
JWT라이브러리를 사용하여 발급자의 서명을 토큰의 서명과 비교하십시오. 발급자 서명은 토큰과 일치하는
kid
in jwks.json의 공개 키 (RSA모듈러스"n"
) 에서 파생됩니다.kid
먼저 를 형식으로 변환해야 할 수도 있습니다. JWK PEM 다음 예제에서는 JWT JWK 및 를 사용하고 Node.js 라이브러리인 jsonwebtoken을사용하여 서명을 확인합니다. JWT
클레임 확인
JWT클레임을 확인하려면
-
다음 방법 중 하나를 사용하여 토큰이 만료되지 않았는지 확인합니다.
-
토큰을 디코딩하고
exp
클레임을 현재 시간과 비교합니다. -
액세스 토큰에
aws.cognito.signin.user.admin
클레임이 포함된 경우 API 좋아요에 요청을 보내세요 GetUser. API액세스 토큰으로 요청을 승인하면 토큰이 만료된 경우 오류가 반환됩니다. -
UserInfo 엔드포인트 요청 시 액세스 토큰을 제시합니다. 토큰이 만료된 경우 요청에서 오류가 반환됩니다.
-
-
ID 토큰의
aud
클레임 및 액세스 토큰의client_id
클레임은 Amazon Cognito 사용자 풀에서 생성된 앱 클라이언트 ID와 일치해야 합니다. -
발행자(
iss
) 클레임은 사용자 풀과 일치해야 합니다. 예를 들어us-east-1
리전에서 생성된 사용자 풀은 다음과 같은iss
값을 갖게 됩니다.https://cognito-idp.us-east-1.amazonaws.com/
.<userpoolID>
-
token_use
클레임을 확인합니다.-
웹 API 오퍼레이션에서만 액세스 토큰을 수락하는 경우 해당 값은 다음과 같아야 합니다.
access
-
ID 토큰만 사용하고 있는 경우 해당 값은
id
여야 합니다. -
ID와 액세스 토큰을 모두 사용하고 있는 경우에는
token_use
클레임이id
또는access
여야 합니다.
-
이제 토큰 내에 있는 클레임을 신뢰할 수 있습니다.