SAML ID プロバイダーの名前と識別子 - Amazon Cognito

SAML ID プロバイダーの名前と識別子

SAML ID プロバイダー (IdP) に名前を付け、IdP 識別子を割り当てると、そのプロバイダーへの、SP が開始したサインインリクエストとサインアウトリクエストのフローを自動化できます。プロバイダーの名前に対する文字列制約の詳細については、CreateIdentityProviderProviderName プロパティを参照してください。

IdP の識別子とホストされた UI を使用した、Amazon Cognito の SP が開始した SAML サインインの認証フロー図。ユーザーは、ホストされた UI に E メールアドレスを提供し、Amazon Cognito は、自動的にプロバイダーにリダイレクトします。

SAML プロバイダーの識別子を 50 個まで選択することもできます。識別子は、ユーザープール内の IdP のわかりやすい名前であり、ユーザープール内で一意である必要があります。SAML 識別子がユーザーの E メールドメインと一致する場合、Amazon Cognito がホストする UI は、各ユーザーの E メールアドレスをリクエストし、E メールアドレス内のドメインを評価し、ドメインに対応する IdP にリダイレクトします。同じ組織で複数のドメインを所有することができるため、1 つの IdP が複数の識別子を持つことができます。

E メールドメイン識別子の使用の有無にかかわらず、マルチテナントアプリケーションの識別子を使用して、ユーザーを正しい IdP にリダイレクトできます。ホストされた UI を完全にバイパスする場合は、ユーザーに提示するリンクをカスタマイズして、認可エンドポイント を介して IdP に直接リダイレクトできます。識別子を使用してユーザーにサインインし、IdP にリダイレクトするには、最初の認可リクエストのリクエストパラメータに idp_identifier=myidp.example.com 形式の識別子を含めます。

ユーザーを IdP に渡す別の方法は、IdP の名前を持つパラメータ identity_provider を、次の URL 形式で入力することです。

https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& identity_provider=MySAMLIdP& client_id=1example23456789& redirect_uri=https://www.example.com

ユーザーが SAML IdP でサインインすると、IdP は、HTTP POST 本文内の SAML レスポンスを使用して /saml2/idpresponse エンドポイントにリダイレクトします。Amazon Cognito は SAML アサーションを処理し、レスポンスのクレームが期待を満たしている場合、アプリケーションクライアントのコールバック URL にリダイレクトします。ユーザーがこの方法で認証を完了すれば、ユーザーが IdP とアプリケーションのためにのみウェブページを操作したことになります。

ドメイン形式の IdP 識別子を使用すると、Amazon Cognito がホストする UI は、サインイン時に E メールアドレスをリクエストし、E メールドメインが IdP 識別子と一致すると、ユーザーを IdP のサインインページにリダイレクトします。例えば、異なる 2 つの会社に所属する従業員によるサインインが必要となるアプリケーションを構築するとします。最初の会社、AnyCompany A は、exampleA.com および exampleA.co.uk を所有しています。2 番目の会社、AnyCompany B は、exampleB.com を所有しています。この例では、以下のように、1 社ごとに 2 つの IdP を設定します。

  • IdP A では、識別子 exampleA.com および exampleA.co.uk を定義します。

  • IdP B では、識別子 exampleB.com を定義します。

アプリケーションで、アプリケーションクライアントのホストされた UI を呼び出して、各ユーザーに E メールアドレスの入力を求めるプロンプトを表示します。Amazon Cognito は、E メールアドレスからドメインを取得し、ドメインを IdP とドメイン識別子に関連付け、idp_identifier リクエストパラメータを含む 認可エンドポイント へのリクエストを使用して、ユーザーを正しい IdP にリダイレクトします。例えば、ユーザーが bob@exampleA.co.uk を入力した場合、ユーザーが操作する次のページは、https://auth.exampleA.co.uk/sso/saml の IdP サインインページになります。

また、同じロジックを個別に実装することもできます。アプリケーションでは、ユーザー入力を収集したうえで独自のロジックに従って正しい IdP に関連付けるカスタムフォームを構築できます。各アプリケーションテナント用のカスタムアプリケーションポータルを生成できます。このポータルでは、各アプリケーションテナントは、リクエストパラメータ内のテナントの識別子を使用して認可エンドポイントにリンクします。

E メールアドレスを収集して、ホストされた UI 内のドメインを解析するには、アプリケーションクライアントに割り当てた各 SAML IdP に 1 個以上の識別子を割り当てます。デフォルトでは、ホストされた UI サインイン画面には、アプリケーションクライアントに割り当てた各 IdP のボタンが表示されます。識別子を正常に割り当てると、ホストされた UI のサインインページは次のようになります。

Amazon Cognito でホストされた UI のサインインページ。ローカルユーザーのサインインと、フェデレーティッドユーザーによる E メールアドレスの入力を求めるプロンプトが表示されます。

ホストされた UI のドメイン解析では、ドメインを IdP 識別子として使用する必要があります。アプリケーションクライアントの各 SAML IdP に任意のタイプの識別子を割り当てると、そのアプリケーションのホストされた UI には、IdP の選択ボタンが表示されなくなります。E メール解析やカスタムロジックを使用してリダイレクトを生成する場合は、SAML の IdP 識別子を追加します。サイレントリダイレクトを生成するとともに、ホストされた UI に IdP のリストを表示する場合は、識別子を割り当てず、認可リクエストで identity_provider リクエストパラメータを使用します。

  • アプリクライアントに SAML IdP を 1 つだけ割り当てると、ホストされた UI サインインページにその IdP でサインインするためのボタンが表示されます。

  • アプリケーションクライアントでアクティブ化するすべての SAML IdP に識別子を割り当てると、ホストされた UI サインインページには、E メールアドレスの入力をユーザーに求めるプロンプトが表示されます。

  • 複数の IdP があるものの、すべてに識別子を割り当てない場合、ホストされた UI サインインページには、割り当てられた各 IdP でサインインするためのボタンが表示されます。

  • IdP に識別子を割り当て、ホストされた UI に特定の IdP ボタンを表示する場合は、識別子を持たない新しい IdP をアプリケーションクライアントに追加するか、新しいアプリケーションクライアントを作成します。既存の IdP を削除し、識別子を用いずにそれを再度追加することもできます。新しい IdP を作成すると、SAML ユーザーが新しいユーザープロファイルを作成します。このようにアクティブなユーザーが重複していると、IdP 設定を変更した月に請求に影響する可能性があります。

IdP セットアップの詳細については、「ユーザープールの ID プロバイダーの設定」を参照してください。