AWS CLI を使用して Amazon Cognito の JWT トークンを取り消すにはどうすればよいですか?

所要時間2分
0

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

新しく追加されたクレーム

2 つの新しいクレーム origin_jtijti がアクセストークンと ID トークンに追加されます。その結果、アプリクライアント内のトークンのサイズが増加します。

jti クレームは、JWT の一意の識別子を提供します。同じ値を別のデータオブジェクトに割り当てることができないよう、識別子の値を割り当てる必要があります。アプリクライアントが複数の発行者を使用している場合は、異なる値を使用して衝突を防止します。

注意: jti クレームはオプションです。詳細については、インターネット技術タスクフォース (IETF) のウェブサイトの RFC 7519) を参照してください。


関連情報

JSON web トークンの検証

更新トークンの取り消し

Amazon Cognito JSON ウェブトークンの署名を復号して検証するにはどうすればよいですか?

コメントはありません