OIDC ユーザープール IdP 認証フロー
OpenID Connect (OIDC) サインインを使用すると、ユーザープールは ID プロバイダー (IdP) による認可コードサインインフローを自動化します。ユーザーが IdP でサインインを完了すると、Amazon Cognito は外部プロバイダーの oauth2/idpresponse
エンドポイントでコードを収集します。結果として得られたアクセストークンを使用して、ユーザープールは、IdP userInfo
エンドポイントにクエリを実行してユーザー属性を取得します。その後、ユーザープールは、受信した属性を、設定済みの属性マッピングルールと比較し、それに応じてユーザーのプロファイルと ID トークンを入力します。
OIDC プロバイダー設定でリクエストする OAuth 2.0 スコープは、IdP が Amazon Cognito に提供するユーザー属性を定義します。セキュリティのベストプラクティスとしては、ユーザープールにマッピングする属性に対応するスコープのみをリクエストします。例えば、ユーザープールが openid profile
をリクエストすると、考えられる属性がすべて取得されますが、openid email
phone_number
をリクエストすると、ユーザーの E メールアドレスと電話番号のみが取得されます。OIDC IdP にリクエストするスコープについては、アプリケーションクライアントとユーザープール認証リクエストで認可とリクエストを行うスコープとは異なるものとして設定できます。
ユーザーが OIDC IdP を使用してアプリケーションにサインインする場合、ユーザープールは、以下の認証フローはを実行します。
-
ユーザーが Amazon Cognito の組み込みサインインページにアクセスすると、Salesforce などの OIDC IdP 経由でサインインするオプションが提示されます。
-
ユーザーは、OIDC IdP の
authorization
エンドポイントにリダイレクトされます。 -
ユーザーが認証を行うと、OIDC IdP が認可コードを使用して Amazon Cognito にリダイレクトします。
-
Amazon Cognito が OIDC IdP の認可コードをアクセストークンと交換します。
-
Amazon Cognito がユーザープールのユーザーアカウントを作成または更新します。
-
Amazon Cognito がアプリケーションのベアラートークンを発行します。これには ID トークン、アクセストークン、および更新トークンが含まれる場合があります。
注記
Amazon Cognito は 5 分以内に完了しない認証リクエストをキャンセルし、ホストされた UI にユーザーをリダイレクトします。ページには、Something
went wrong
というエラーメッセージが表示されます。
OIDC は、OAuth 2.0 の上に位置する ID レイヤーです。OAuth 2.0 は、IdP から OIDC クライアントアプリ (証明書利用者) に発行される JSON 形式 (JWT) の ID トークンを指定します。Amazon Cognito の OIDC Relying Party としての追加に関する情報は、OIDC IdP のドキュメントを参照してください。
ユーザーが認可コード付与を使用して認証すると、ユーザープールは ID、アクセス、更新トークンを返します。ID トークンは ID 管理用の OIDC
ユーザープールが OIDC プロバイダーからのクレームを処理する方法
ユーザーがサードパーティーの OIDC プロバイダーへのサインインを完了すると、Amazon Cognito がホストする UI は IdP から認可コードを取得します。ユーザープールは、アクセストークンと ID トークンの認可コードを IdP の token
エンドポイントと交換します。ユーザープールはこれらのトークンをユーザーやアプリに渡すのではなく、これらを使って独自のトークンのクレームで提示するデータを使用してユーザープロファイルを構築します。
Amazon Cognito はアクセストークンを個別に検証しません。代わりに、userInfo
プロバイダーの エンドポイントにユーザー属性情報をリクエストし、トークンが有効でない場合はリクエストが拒否されることを想定しています。
Amazon Cognito は、以下のチェックを行ってプロバイダー ID トークンを検証します。
-
プロバイダーが RSA、HMAC、Elliptic Curve というセットのアルゴリズムを使用してトークンに署名したことをチェックします。
-
プロバイダーが非対称署名アルゴリズムを使用してトークンに署名した場合は、トークンの
kid
クレームの署名キー ID がプロバイダーのjwks_uri
エンドポイントに表示されていることを確認します。 -
ID トークンの署名を、プロバイダーのメタデータに基づいて想定される署名と比較します。
-
iss
クレームを IdP に設定された OIDC 発行者と比較します。 -
aud
クレームが IdP で設定されているクライアント ID と一致するか、またはaud
クレームに複数の値がある場合は設定されたクライアント ID が含まれているかを比較します。 -
exp
クレームのタイムスタンプが現在の時刻より前でないことをチェックします。
ユーザープールは ID トークンを検証し、プロバイダーアクセストークンを使用してプロバイダーの userInfo
エンドポイントへのリクエストを試みます。アクセストークンのスコープによって読み取りが許可されたユーザープロファイル情報がすべて取得されます。次にユーザープールはユーザープールの要求に従って設定したユーザー属性を検索します。プロバイダー設定で、必要な属性の属性マッピングを作成する必要があります。ユーザープールはプロバイダー ID トークンと userInfo
レスポンスをチェックします。ユーザープールは、マッピングルールに一致するすべてのクレームをユーザープールのユーザープロファイルのユーザー属性に書き込みます。ユーザープールは、マッピングルールに一致するが必須ではなく、プロバイダーのクレームにも含まれていない属性を無視します。