キャッシュトークン - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

キャッシュトークン

新しい JSON ウェブトークン (JWT) を取得するたびに、アプリは次のいずれかのリクエストを正常に完了する必要があります。

  • トークンエンドポイント からクライアント認証情報または認証コードの付与をリクエストする。

  • ホストされている UI から暗黙的付与をリクエストする。

  • などの Amazon Cognito API リクエストでローカルユーザーを認証しますInitiateAuth

トークンの有効期限が分単位、時間単位、または日単位になるようにユーザープールを設定できます。アプリのパフォーマンスと可用性を確保するには、有効期限が切れるまで Amazon Cognito トークンを使用してから、新しいトークンを取得してください。アプリ用に構築したキャッシュソリューションはトークンを利用可能な状態に保ち、リクエストレートが高すぎる場合に Amazon Cognito がリクエストを拒否するのを防ぎます。クライアント側のアプリは、トークンをメモリキャッシュに保存する必要があります。サーバー側アプリでは、暗号化されたキャッシュメカニズムを追加してトークンを保存できます。

ユーザープールが大量のユーザーまたは machine-to-machine アクティビティを生成すると、Amazon Cognito がトークンのリクエスト数に設定する制限が発生する場合があります。Amazon Cognito エンドポイントへのリクエスト数を減らすには、認証データを安全に保存して再利用するか、エクスポネンシャルバックオフと再試行を実装することができます。

認証データは 2 つのクラスのエンドポイントから取得されます。Amazon Cognito OAuth 2.0 エンドポイントには、クライアントの認証情報とホストされた UI 認証コードのリクエストを処理するトークンエンドポイントが含まれています。サービスエンドポイントは、InitiateAuthRespondToAuthChallenge のようなユーザープール API リクエストに応答します。各タイプのリクエストには独自の制限があります。制限事項の詳細については、「Amazon Cognito のクォータ」を参照してください。

Amazon API Gateway を使用した machine-to-machine アクセストークンのキャッシュ

API Gateway トークンキャッシュを使用すると、Amazon Cognito OAuth エンドポイントのデフォルトのリクエストレートクォータを超えるイベントに応じてアプリをスケールさせることができます。

アクセストークンをキャッシュして、キャッシュされたトークンの有効期限が切れた場合にのみ、アプリが新しいアクセストークンをリクエストするようにできます。それ以外の場合、キャッシュエンドポイントはキャッシュからトークンを返します。これにより、Amazon Cognito API エンドポイントへの追加呼び出しを防ぐことができます。Amazon API Gateway を トークンエンドポイント へのプロキシとして使用する場合、API はリクエストクォータに影響するリクエストの大半に応答し、レート制限によるリクエストの失敗を防ぎます。

次の API Gateway ベースのソリューションでは、トークンキャッシュの低レイテンシー、ローコード、ノーコード実装が提供されます。API Gateway API は転送中に暗号化され、オプションで保存時にも暗号化されます。API Gateway キャッシュは、OAuth 2.0 クライアント認証情報付与 に最適です。OAuth 2.0 クライアント認証情報付与 は、 machine-to-machine およびマイクロサービスセッションを承認するためのアクセストークンを生成する、頻繁に大量の付与タイプです。トラフィックの急増などによりマイクロサービスが水平方向にスケールすると、ユーザープールまたはアプリクライアントの AWS リクエストレート制限を超えるボリュームで同じクライアント認証情報を使用する多くのシステムが発生する可能性があります。このようなシナリオでは、アプリの可用性と低レイテンシーを維持するために、キャッシュソリューションがベストプラクティスです。

このソリューションでは、API にキャッシュを定義して、アプリでリクエストする OAuth スコープとアプリクライアントの組み合わせごとに個別のアクセストークンを保存します。アプリがキャッシュキーと一致するリクエストを行うと、API はキャッシュキーと一致する最初のリクエストに対して Amazon Cognito が発行したアクセストークンを返します。キャッシュキーの有効期限が切れると、API はリクエストをトークンエンドポイントに転送し、新しいアクセストークンをキャッシュします。

注記

キャッシュキーの有効期間は、アプリクライアントのアクセストークン有効期間よりも短くする必要があります。

キャッシュキーは、scope URL パラメータでリクエストした OAuth スコープとリクエストの Authorization ヘッダーの組み合わせです。Authorization ヘッダーには、アプリのクライアント ID とクライアントシークレットが含まれます。このソリューションを実装するために、アプリに追加のロジックを実装する必要はありません。ユーザープールトークンエンドポイントへのパスを変更するには、設定を更新するだけで済みます。

ElastiCache for Redis を使用してトークンキャッシュを実装することもできます。 AWS Identity and Access Management (IAM) ポリシーによるきめ細かなコントロールが必要な場合は、Amazon DynamoDB キャッシュをご検討ください。

注記

API Gateway でのキャッシュには追加料金がかかります。詳細については、料金表を参照してください。

API Gateway でキャッシュプロキシをセットアップする方法

  1. API Gateway コンソールを開き、REST API を作成します。

  2. [Resources] (リソース) で、POST メソッドを作成します。

    1. HTTP [Integration type] (統合タイプ) を選択してください。

    2. [Use HTTP proxy integration] (HTTP プロキシ統合の使用) を選択します。

    3. https://<your user pool domain>/oauth2/token[Endpoint URL] (エンドポイント URL) を入力します。

  3. [Resources] (リソース) で、キャッシュキーを設定します。

    1. POST メソッドの [Method request] (メソッドリクエスト) を編集します。

    2. scope パラメータと Authorization ヘッダーをキャッシュキーとして設定します。

      1. クエリ文字列を [URL query string parameters] (URL クエリ文字列パラメータ) に追加し、scope 文字列の [Caching] (キャッシュ) を選択します。

      2. [HTTP request headers] (HTTP リクエストヘッダー) にヘッダーを追加し、Authorization ヘッダーの [Caching] (キャッシュ) を選択します。

  4. [Stages] (ステージ) で、キャッシュを設定します。

    1. 変更するステージを選択します。

    2. [Settings] (設定) で、[Enable API cache] (API キャッシュを有効にする) を選択します。

    3. [Cache capacity] (キャッシュ容量) を選択します。

    4. 少なくとも 3600 秒のキャッシュ time-to-live (TTL) を選択します。

    5. [承認を必須にする] チェックボックスをオフにします。

  5. [Stages] (ステージ) で、[Invoke URL] (URL を呼び出す) に注目します。

  6. ユーザープールの /oauth2/token エンドポイントの代わりに、API の Invoke URL (URL を呼び出す) にトークンリクエストを POST するようにアプリを更新します。