認証コードの許可PKCEで を使用する - Amazon Cognito

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

認証コードの許可PKCEで を使用する

Amazon Cognito は、認証コードの付与でコード交換 (PKCE) 認証のプルーフキーをサポートしています。PKCE は の拡張機能です。OAuth パブリッククライアントに対する 2.0 認証コードの付与。PKCE は、傍受された認証コードの引き換えから保護します。

Amazon Cognito の使用方法 PKCE

で認証を開始するにはPKCE、アプリケーションが一意の文字列値を生成する必要があります。この文字列は、Amazon Cognito が最初の認証許可をリクエストするクライアントとトークンの承認コードを交換しているクライアントを比較するために使用するシークレット値であるコード検証子です。

アプリはコード検証文字列にSHA256ハッシュを適用し、結果を base64 にエンコードする必要があります。ハッシュされた文字列をリクエスト本文のcode_challengeパラメータ認可エンドポイントとして に渡します。アプリケーションがトークンの承認コードを交換する際は、 へのリクエスト本文に code_verifierパラメータとしてプレーンテキストのコード検証文字列を含める必要がありますトークンエンドポイント。Amazon Cognito は、コード検証子に対して同じ hash-and-encode操作を実行します。Amazon Cognito は、コード検証子が認証リクエストで受け取ったのと同じコードチャレンジの結果であると判断した場合のみ、ID、アクセス、および更新トークンを返します。

で認証付与フローを実装するには PKCE
  1. Amazon Cognito コンソールを開きます。プロンプトが表示されたら、 AWS 認証情報を入力します。

  2. [User Pools] (ユーザープール) を選択します。

  3. リストから既存のユーザープールを選択するか、ユーザープールを作成します。ユーザープールを作成すると、ウィザード中にアプリケーションクライアントを設定し、ホストされた UI を設定するように求められます。

    1. 新しいユーザープールを作成する場合は、ガイド付きセットアップ中にアプリケーションクライアントを設定し、ホストされた UI を設定します。

    2. 既存のユーザープールを設定する場合は、ドメインユーザープールのドメインを設定するパブリックアプリケーションクライアント を追加します。

  4. ランダムな英数字文字列、通常はユニバーサルに一意の識別子 (UUID) を生成して、 のコードチャレンジを作成しますPKCE。この文字列は、リクエストで に送信するcode_verifierパラメータの値ですトークンエンドポイント

  5. code_verifier 文字列をSHA256アルゴリズムでハッシュします。ハッシュ操作の結果を base64 にエンコードします。この文字列は、リクエストで に送信するcode_challengeパラメータの値です認可エンドポイント

    以下のようになります Python サンプルは を生成code_verifierし、 を計算しますcode_challenge

    #!/usr/bin/env python3 import random from base64 import urlsafe_b64encode from hashlib import sha256 from string import ascii_letters from string import digits # use a cryptographically strong random number generator source rand = random.SystemRandom() code_verifier = ''.join(rand.choices(ascii_letters + digits, k=128)) code_verifier_hash = sha256(code_verifier.encode()).digest() code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=') print(f"code challenge: {code_challenge}") print(f"code verifier: {code_verifier}")

    以下は、 からの出力例です。Python スクリプト:

    code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  6. で認証コード付与リクエストを使用して、ホストされた UI サインインを完了しますPKCE。の例を次に示しますURL。

    https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256
  7. 認証を収集codeし、トークンエンドポイントを持つトークンと引き換えます。リクエストの例を次に示します。

    POST /oauth2/token HTTP/1.1 Host: mydomain.us-east-1.amazoncognito.com Content-Type: application/x-www-form-urlencoded Content-Length: 296 redirect_uri=https%3A%2F%2Fwww.example.com& client_id=1example23456789& code=7378f445-c87f-400c-855e-0297d072ff03& grant_type=authorization_code& code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  8. レスポンスを確認します。ID、アクセス、更新トークンが含まれます。Amazon Cognito ユーザープールトークンの使用の詳細については、「」を参照してくださいユーザープールJSONウェブトークンについて (JWTs)