Amazon Cognito 사용자 풀에서 발행된 JSON 웹 토큰(JWT) 토큰을 취소하고 싶습니다.
간략한 설명
Amazon Cognito 새로 고침 토큰은 사용자가 사용자 풀에 로그인한 후 30일 후에 만료됩니다. 앱 클라이언트 새로 고침 토큰 만료를 60분에서 10년 사이에 설정할 수 있습니다. 자세한 내용은 새로 고침 토큰 사용을 참조하세요.
새로 고침 토큰을 실시간으로 취소할 수도 있습니다. 이렇게 하면 새로 고침 토큰이 추가 액세스 토큰을 생성할 수 없습니다. 새로 고침 토큰으로 의해 이전에 발급된 모든 액세스 토큰은 유효하지 않습니다.
새로 고침 토큰을 취소해도 병렬 사용자 세션과 연결된 다른 새로 고침 토큰에는 영향을 미치지 않습니다.
해결 방법
JWT 토큰을 취소하려면 앱 클라이언트에 따른 관련 지침을 참조하세요.
참고:
- AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.
- Amazon Cognito 사용자 풀 앱 클라이언트는 앱에 대한 선택적 암호를 가질 수 있습니다. 자세한 내용은 사용자 풀 앱 클라이언트 구성을 참조하세요.
- us-east-1을 AWS 리전으로 바꾸고 user-pool-id, client-id, username, email, tokens, secret 및 password를 변수로 바꿉니다.
암호가 없는 앱 클라이언트
AWS CLI 명령 admin-initiate-auth를 실행하여 관리자로 인증 흐름을 시작하여 ID, 액세스 토큰 및 새로 고침 토큰을 가져옵니다.
$ aws --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters USERNAME=user-name,PASSWORD=your-password --auth-flow ADMIN_NO_SRP_AUTH
다음과 유사한 출력이 나타납니다.
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "eyJra....",
"ExpiresIn": 3600,
"TokenType": "Bearer",
"RefreshToken": "ey.._9Dg",
"IdToken": "ey..DU-Q"
}
}
AWS CLI 명령 revoke-token을 실행하여 다음과 유사한 새로 고침 토큰을 취소합니다.
$ aws --region us-east-1 cognito-idp revoke-token --client-id your-client-id --token eyJra....
참고: 출력이 수신되지 않습니다.
새 액세스 토큰과 ID를 받기 위해 동일한 새로 고침 토큰을 사용하여 테스트합니다.
$ aws --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters REFRESH_TOKEN=eyJra....tw --auth-flow REFRESH_TOKEN_AUTH
다음과 유사한 새로 고침 토큰이 취소된 출력이 수신됩니다.
Error: An error occurred (NotAuthorizedException) when calling the AdminInitiateAuth operation: Refresh Token has been revoked
암호가 있는 앱 클라이언트
지침에 따라 Python 스크립트를 사용하여 SecretHash 값을 생성합니다.
AWS CLI 명령 admin-initiate-auth를 실행하여 관리자 권한으로 인증 흐름을 시작합니다. 그러면 ID, 액세스 토큰 및 새로 고침 토큰이 제공됩니다. 이 명령은 다음과 유사합니다.
$ aws --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters USERNAME=user-name,PASSWORD=your-password,SECRET_HASH=IkVyH...= --auth-flow ADMIN_NO_SRP_AUTH
다음과 비슷한 출력이 표시됩니다.
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "eyJra....",
"ExpiresIn": 3600,
"TokenType": "Bearer",
"RefreshToken": "eyJjd....",
"IdToken": "ey..YQSA"
}
}
AWS CLI 명령 revoke-token을 실행하여 새로 고침 토큰을 취소합니다.
$ aws --region us-east-1 cognito-idp revoke-token --client-id your-client-id --token eyJjd... --client-secret 1n00....
동일한 새로 고침 토큰을 사용하여 테스트를 실행하여 새 액세스 토큰과 ID를 얻으세요.
$ aws --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters REFRESH_TOKEN=eyJjdH.... --auth-flow REFRESH_TOKEN_AUTH
새로 고침 토큰이 취소되었다는 출력이 표시됩니다.
Error: An error occurred (NotAuthorizedException) when calling the AdminInitiateAuth operation: Refresh Token has been revoked
새로 추가된 클레임
두 개의 새로운 클레임인 origin_jti와 jti가 액세스 토큰과 ID 토큰에 추가되어 앱 클라이언트의 토큰 크기가 커졌습니다.
jti 클레임은 JWT에 대한 고유 식별자를 제공합니다. 동일한 값을 다른 데이터 객체에 할당할 수 없도록 식별자 값을 할당해야 합니다. 앱 클라이언트가 여러 발급자를 사용하는 경우 다른 값을 사용하여 충돌을 방지합니다.
참고: jti 클레임은 선택 사항입니다. 자세한 내용은 Internet Engineering Task Force 웹 사이트에서 RFC-7519)을 참조하세요.
관련 정보
JSON 웹 토큰 확인
새로 고침 토큰 취소
Amazon Cognito JSON 웹 토큰의 서명을 디코딩하고 확인하려면 어떻게 해야 하나요?