AWS CLI를 사용하여 Cognito에서 JWT 토큰을 취소하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 18일

Amazon Cognito 사용자 풀에서 발급된 JSON Web Token(JWT) 토큰을 취소하고 싶습니다.

간략한 설명

Amazon Cognito 새로 고침 토큰은 사용자가 사용자 풀에 로그인한 후 30일 후에 만료됩니다. 앱 클라이언트 새로 고침 토큰 만료를 60분에서 10년 사이에 설정할 수 있습니다. 자세한 내용은 새로 고침 토큰 사용을 참조하세요.

새로 고침 토큰이 추가 액세스 토큰을 생성할 수 없도록 실시간으로 새로 고침 토큰을 취소할 수도 있습니다.

새로 고침 토큰으로 의해 이전에 발급된 모든 액세스 토큰은 유효하지 않습니다. 사용자에게 발급된 새로 고침 토큰은 영향을 받지 않습니다.

해결 방법

지침에 따라 앱 클라이언트를 기반으로 JWT 토큰을 취소합니다.

참고:

암호가 없는 앱 클라이언트

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_jtijti가 액세스 및 ID 토큰에 추가되어 앱 클라이언트의 토큰 크기가 증가합니다.

jti 클레임은 JWT에 대한 고유 식별자를 제공합니다. 동일한 값을 다른 데이터 객체에 할당할 수 없도록 식별자 값을 할당해야 합니다. 앱 클라이언트가 여러 발급자를 사용하는 경우 다른 값을 사용하여 충돌을 방지합니다.

참고: jti 클레임은 선택 사항입니다. 자세한 내용은 RFC-7519를 참조하세요.