翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
認証コードの許可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
-
Amazon Cognito コンソール
を開きます。プロンプトが表示されたら、 AWS 認証情報を入力します。 -
[User Pools] (ユーザープール) を選択します。
-
リストから既存のユーザープールを選択するか、ユーザープールを作成します。ユーザープールを作成すると、ウィザード中にアプリケーションクライアントを設定し、ホストされた UI を設定するように求められます。
-
新しいユーザープールを作成する場合は、ガイド付きセットアップ中にアプリケーションクライアントを設定し、ホストされた UI を設定します。
-
既存のユーザープールを設定する場合は、ドメインユーザープールのドメインを設定するとパブリックアプリケーションクライアント を追加します。
-
-
ランダムな英数字文字列、通常はユニバーサルに一意の識別子 (UUID) を生成して、 のコードチャレンジを作成しますPKCE。この文字列は、リクエストで に送信する
code_verifier
パラメータの値ですトークンエンドポイント。 -
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
-
で認証コード付与リクエストを使用して、ホストされた 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 -
認証を収集
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
-
レスポンスを確認します。ID、アクセス、更新トークンが含まれます。Amazon Cognito ユーザープールトークンの使用の詳細については、「」を参照してくださいユーザープールJSONウェブトークンについて (JWTs)。