ユーザープールトークンの有効期限とキャッシュの管理
新しい JSON ウェブトークン (JWT) を取得するたびに、アプリは次のいずれかのリクエストを正常に完了する必要があります。
-
トークンエンドポイント からクライアント認証情報または認可コードの付与
をリクエストする。 -
ホストされている UI から暗黙的付与をリクエストする。
-
InitiateAuth のような Amazon Cognito API リクエストでローカルユーザーを認証する。
トークンの有効期限が分単位、時間単位、または日単位になるようにユーザープールを設定できます。アプリケーションのパフォーマンスと可用性を確保するには、トークンの有効期間の約 75% まで Amazon Cognito トークンを使用してから、新しいトークンを取得してください。アプリ用に構築したキャッシュソリューションはトークンを利用可能な状態に保ち、リクエストレートが高すぎる場合に Amazon Cognito がリクエストを拒否するのを防ぎます。クライアント側のアプリは、トークンをメモリキャッシュに保存する必要があります。サーバー側アプリでは、暗号化されたキャッシュメカニズムを追加してトークンを保存できます。
ユーザープールがユーザーまたはマシンツーマシンのアクティビティを大量に生成する場合、Amazon Cognito が設定したトークンをリクエストできる数の制限に遭遇する可能性があります。Amazon Cognito エンドポイントへのリクエスト数を減らすには、認証データを安全に保存して再利用するか、エクスポネンシャルバックオフと再試行を実装することができます。
認証データは 2 つのクラスのエンドポイントから取得されます。Amazon Cognito OAuth 2.0 エンドポイントには、クライアントの認証情報とホストされた UI 認可コードのリクエストを処理するトークンエンドポイントが含まれています。サービスエンドポイントは、InitiateAuth
や RespondToAuthChallenge
のようなユーザープール API リクエストに応答します。各タイプのリクエストには独自の制限があります。制限事項の詳細については、「Amazon Cognito のクォータ」を参照してください。
Amazon API Gateway によるマシンツーマシンアクセストークンのキャッシュ
API Gateway トークンキャッシュを使用すると、Amazon Cognito OAuth エンドポイントのデフォルトのリクエストレートクォータを超えるイベントに応じてアプリをスケールさせることができます。
アクセストークンをキャッシュして、キャッシュされたトークンの有効期限が切れた場合にのみ、アプリが新しいアクセストークンをリクエストするようにできます。それ以外の場合、キャッシュエンドポイントはキャッシュからトークンを返します。これにより、Amazon Cognito API エンドポイントへの追加呼び出しを防ぐことができます。Amazon API Gateway を トークンエンドポイント へのプロキシとして使用する場合、API はリクエストクォータに影響するリクエストの大半に応答し、レート制限によるリクエストの失敗を防ぎます。
次の API Gateway ベースのソリューションでは、トークンキャッシュの低レイテンシー、ローコード、ノーコード実装が提供されます。API Gateway API は転送中に暗号化され、オプションで保存時にも暗号化されます。API Gateway キャッシュは、OAuth 2.0 クライアント認証情報の付与
このソリューションでは、API にキャッシュを定義して、アプリでリクエストする OAuth スコープとアプリクライアントの組み合わせごとに個別のアクセストークンを保存します。アプリがキャッシュキーと一致するリクエストを行うと、API はキャッシュキーと一致する最初のリクエストに対して Amazon Cognito が発行したアクセストークンを返します。キャッシュキーの有効期限が切れると、API はリクエストをトークンエンドポイントに転送し、新しいアクセストークンをキャッシュします。
注記
キャッシュキーの有効期間は、アプリクライアントのアクセストークン有効期間よりも短くする必要があります。
キャッシュキーは、scope
URL パラメータでリクエストした OAuth スコープとリクエストの Authorization
ヘッダーの組み合わせです。Authorization
ヘッダーには、アプリのクライアント ID とクライアントシークレットが含まれます。このソリューションを実装するために、アプリに追加のロジックを実装する必要はありません。ユーザープールトークンエンドポイントへのパスを変更するには、設定を更新するだけで済みます。
トークンキャッシュは、ElastiCache (Redis OSS) で実装することもできます。AWS Identity and Access Management (IAM) ポリシーによるきめ細かなコントロールが必要な場合は、Amazon DynamoDB キャッシュをご検討ください。
注記
API Gateway でのキャッシュには追加料金がかかります。詳細については、料金表を参照してください。
API Gateway でキャッシュプロキシをセットアップする方法
-
API Gateway コンソール
を開き、REST API を作成します。 -
[Resources] (リソース) で、POST メソッドを作成します。
-
HTTP [Integration type] (統合タイプ) を選択してください。
-
[Use HTTP proxy integration] (HTTP プロキシ統合の使用) を選択します。
-
https://
の [Endpoint URL] (エンドポイント URL) を入力します。<your user pool domain>
/oauth2/token
-
-
[Resources] (リソース) で、キャッシュキーを設定します。
-
POST メソッドの [Method request] (メソッドリクエスト) を編集します。
-
scope
パラメータとAuthorization
ヘッダーをキャッシュキーとして設定します。-
クエリ文字列を [URL query string parameters] (URL クエリ文字列パラメータ) に追加し、
scope
文字列の [Caching] (キャッシュ) を選択します。 -
[HTTP request headers] (HTTP リクエストヘッダー) にヘッダーを追加し、
Authorization
ヘッダーの [Caching] (キャッシュ) を選択します。
-
-
-
[Stages] (ステージ) で、キャッシュを設定します。
-
変更するステージを選択します。
-
[Settings] (設定) で、[Enable API cache] (API キャッシュを有効にする) を選択します。
-
[Cache capacity] (キャッシュ容量) を選択します。
-
[キャッシュ期限 (TTL)] は 3600 秒を選択します。
-
[承認を必須にする] チェックボックスをオフにします。
-
-
[Stages] (ステージ) で、[Invoke URL] (URL を呼び出す) に注目します。
-
ユーザープールの
/oauth2/token
エンドポイントの代わりに、API の Invoke URL (URL を呼び出す) にトークンリクエストを POST するようにアプリを更新します。