액세스 토큰 이해 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

액세스 토큰 이해

사용자 풀 액세스 토큰에는 인증된 사용자에 대한 클레임, 사용자 그룹 목록 및 범위 목록이 포함되어 있습니다. 액세스 토큰의 목적은 API 작업을 승인하는 것입니다. 사용자 풀은 액세스 토큰을 받아 사용자 셀프 서비스 작업을 승인합니다. 예를 들어 액세스 토큰을 사용하여 사용자 속성을 추가, 변경 또는 삭제하기 위한 액세스 권한을 사용자에게 부여할 수 있습니다.

사용자 풀에 추가한 사용자 지정 범위에서 파생된 액세스 토큰의 OAuth 2.0 범위를 사용하면 사용자에게 API에서 정보를 검색하도록 권한을 부여할 수 있습니다. 예를 들어, Amazon API Gateway는 Amazon Cognito 액세스 토큰을 통한 권한 부여를 지원합니다. 사용자 풀의 정보로 REST API 권한 부여자를 채우거나 Amazon Cognito를 HTTP API용 JSON 웹 토큰(JWT) 권한 부여자로 사용할 수 있습니다. 사용자 지정 범위가 있는 액세스 토큰을 생성하려면 사용자 풀 퍼블릭 엔드포인트를 통해 요청해야 합니다.

Essentials 또는 Plus 기능 계획을 사용하면 런타임 시 액세스 토큰에 범위를 추가하는 사전 토큰 생성 Lambda 트리거를 구현할 수도 있습니다. 자세한 내용은 사전 토큰 생성 Lambda 트리거 단원을 참조하십시오.

openid 범위가 인 사용자의 액세스 토큰은에서 사용자 속성에 대한 자세한 정보를 요청할 수 있는 권한입니다userInfo 엔드포인트. userInfo 엔드포인트의 정보 양은 액세스 토큰의 추가 범위, 예를 들어 모든 사용자 데이터의 profile 경우 email 이메일 주소에서 파생됩니다.

aws.cognito.signin.user.admin 범위가 인 사용자의 액세스 토큰은 사용자 속성을 읽고 쓰고, 인증 요소를 나열하고, 멀티 팩터 인증(MFA) 기본 설정을 구성하고, 기억된 디바이스를 관리할 수 있는 권한입니다. 액세스 토큰이이 범위에 부여하는 속성에 대한 액세스 수준은 앱 클라이언트에 할당하는 속성 읽기/쓰기 권한과 일치합니다.

액세스 토큰은 JSON 웹 토큰(JWT)입니다. 액세스 토큰의 헤더는 ID 토큰과 구조가 동일합니다. Amazon Cognito는 ID 토큰을 서명하는 키와는 다른 키를 사용하여 액세스 토큰을 서명합니다. 액세스 키 ID(kid) 클레임의 값은 동일한 사용자 세션의 ID 토큰에 있는 kid 클레임 값과 일치하지 않습니다. 앱 코드에서 ID 토큰과 액세스 토큰을 독립적으로 확인하세요. 서명을 확인하기 전까지는 액세스 토큰의 클레임을 신뢰하지 마세요. 자세한 내용은 JSON 웹 토큰 확인 단원을 참조하십시오. 액세스 토큰 만료 시간은 5분~1일 사이로 설정할 수 있습니다. 앱 클라이언트별로 이 값을 설정할 수 있습니다.

중요

액세스 및 ID 토큰의 경우 관리형 로그인을 사용하는 경우 최소 1시간 미만을 지정하지 마십시오. 관리형 로그인은 1시간 동안 유효한 브라우저 쿠키를 설정합니다. 액세스 토큰 기간을 1시간 미만으로 구성하면 관리형 로그인 쿠키의 유효성 및 최초 로그인 후 1시간 동안 추가 자격 증명 없이 재인증하는 사용자의 기능에 영향을 미치지 않습니다.

액세스 토큰 헤더

헤더에는 키 ID(kid) 및 알고리즘(alg) 등 두 가지 정보가 포함되어 있습니다.

{ "kid" : "1234example=" "alg" : "RS256", }
kid

키 ID입니다. 이 값은 토큰의 JSON 웹 서명(JWS)을 보호하는 데 어떤 키가 사용되었는지 나타냅니다. jwks_uri 엔드포인트에서 사용자 풀 서명 키 ID를 볼 수 있습니다.

kid 파라미터에 대한 자세한 내용은 키 식별자(kid) 헤더 파라미터를 참조하세요.

alg

Amazon Cognito가 액세스 토큰을 보호하는 데 사용한 암호화 알고리즘입니다. 사용자 풀은 SHA-256에서의 RSA 서명인 RS256 암호화 알고리즘을 사용합니다.

alg 파라미터에 대한 자세한 내용은 알고리즘(alg) 헤더 파라미터를 참조하세요.

액세스 토큰 기본 페이로드

액세스 토큰에서 나온 샘플 페이로드입니다. 자세한 내용은 JWT 클레임을 참조하세요. 사전 토큰 생성 Lambda 트리거을 사용하여 자체 설계의 클레임을 추가할 수 있습니다.

<header>. { "sub":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:groups":[ "testgroup" ], "iss":"https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example", "version":2, "client_id":"xxxxxxxxxxxxexample", "origin_jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "event_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "token_use":"access", "scope":"phone openid profile resourceserver.1/appclient2 email", "auth_time":1676313851, "exp":1676317451, "iat":1676313851, "jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "username":"my-test-user" } .<token signature>
sub

인증된 사용자에 대한 고유 식별자(UUID) 또는 제목입니다. 사용자 풀에서 사용자 이름이 고유하지 않을 수 있습니다. sub 클레임은 특정 사용자를 식별하는 가장 좋은 방법입니다.

cognito:groups

사용자를 멤버로 가진 사용자 풀 그룹의 이름 배열입니다.

iss

토큰을 발행한 자격 증명 공급자입니다. 클레임의 형식은 다음과 같습니다.

https://cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE

client_id

사용자를 인증한 사용자 풀 앱 클라이언트입니다. Amazon Cognito는 ID 토큰 aud 클레임에서 동일한 값을 렌더링합니다.

origin_jti

사용자의 새로 고침 토큰과 연결된 토큰 취소 식별자입니다. Amazon Cognito는 취소 엔드포인트 또는 RevokeToken API 작업을 통해 사용자의 토큰을 취소했는지 확인할 때 origin_jti 클레임을 참조합니다. 토큰을 취소하면 Amazon Cognito는 더 이상 동일한 origin_jti 값의 액세스 및 ID 토큰을 검증하지 않습니다.

token_use

토큰의 의도된 목적입니다. 액세스 토큰에서 값은 access입니다.

scope

로그인한 사용자에게 발급된 OAuth 2.0 범위 목록입니다. 범위는 토큰이 엔드포인트의 외부 APIs, 사용자 셀프 서비스 작업 및 사용자 데이터에 제공하는 액세스를 정의합니다userInfo. Token 엔드포인트의 토큰에는 앱 클라이언트가 지원하는 범위가 포함될 수 있습니다. Amazon Cognito API 로그인의 토큰에는 aws.cognito.signin.user.admin 범위만 포함됩니다.

auth_time

사용자가 인증을 완료한 인증 시간(Unix 시간 형식)입니다.

exp

사용자의 토큰이 만료되는 만료 시간(Unix 시간 형식)입니다.

iat

Amazon Cognito가 사용자의 토큰을 발급한 발급 시간(Unix 시간 형식)입니다.

jti

JWT의 고유 식별자입니다.

username

사용자 풀의 사용자 이름입니다.

액세스 토큰 서명

.well-known/jwks.json 엔드포인트에 광고된 키로 서명된 액세스 토큰의 서명은 토큰 헤더 및 페이로드의 무결성을 검증합니다. 액세스 토큰을 사용하여 외부 APIs에 대한 액세스를 승인하는 경우 항상 API 권한 부여자가이 서명을 서명한 키와 비교하여 확인하도록 구성합니다. 자세한 내용은 JSON 웹 토큰 확인 단원을 참조하십시오.