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_jti と jti がアクセストークンと ID トークンに追加されます。その結果、アプリクライアント内のトークンのサイズが増加します。
jti クレームは、JWT の一意の識別子を提供します。同じ値を別のデータオブジェクトに割り当てることができないよう、識別子の値を割り当てる必要があります。アプリクライアントが複数の発行者を使用している場合は、異なる値を使用して衝突を防止します。
注意: jti クレームはオプションです。詳細については、インターネット技術タスクフォース (IETF) のウェブサイトの RFC 7519) を参照してください。
関連情報
JSON web トークンの検証
更新トークンの取り消し
Amazon Cognito JSON ウェブトークンの署名を復号して検証するにはどうすればよいですか?