Cognito によって発行された ID トークンが無効化後も利用できるのはなぜですか?

すでに発行された ID トークンを無効化する機能は現状 Cognito の機能として提供されておりません。
2024.03.12

困っていること

API Gateway の認証処理として Cognito ユーザープールより発行された ID トークンを用いた JWT オーソライザーを使用しています。

AdminUserGlobalSignOut API を用いてトークンを無効化後も一定時間発行された ID トークンが有効な状態となっています。

即時無効化する方法はありますか。

どう対応すればいいの?

すでに発行された ID トークンを無効化する機能は Cognito の機能として提供されておりません

Cognito によって提供される ID トークンは JSON Web Token(JWT) となります。

ID トークンの使用

ID トークンとは、name、email、および phone_number など、認証されたユーザーのアイデンティティに関するクレームが含まれる、 JSON ウェブトークン (JWT) です。

JSON Web Token(JWT) とは、サーバーへの問い合わせを必要とせず、クライアント側で正当性を確保することのできる認証の仕組みとなっております。

JSON Web Token(JWT) には独自の有効期限が設定されており、それによりトークンが有効かが決定いたします。 上記性質上、サーバーサイド側で既にトークンが無効化されていた場合も、API Gateway の JWT オーソライザーのような JSON Web Token(JWT) を用いた認証はトークン側に設定された有効期限が切れるまでは有効となります。

トークンの取り消し

JWT トークンは、トークンが作成されたときに割り当てられた署名と有効期限を持つ自己完結型トークンです。 取り消されたトークンは、トークンを必要とする Amazon Cognito API コールでは使用できません。 ただし、JWT ライブラリを使用してトークンの署名と有効期限が検証された場合は、引き続き使用が可能です。

代替案

Lambda オーソライザーを用いて認証処理を実装いただく方法をご検討ください。

具体的な構成と致しましては、ID トークンの無効化状態を DynamoDB 等の外部データベースに保存し、Lambda オーソライザーでの ID トークンの検証時に ID トークンの無効化状況も合わせて確認するようなものが考えられます。

ID トークンを検証する方法につきましては、以下のドキュメントをご参照ください。

参考資料

ID トークンの使用

トークンの取り消し

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

Cognitoで発行されたJWTを検証する

Cognitoのサインイン時に取得できる、IDトークン・アクセストークン・更新トークンを理解する