SAML Amazon Cognito ユーザープールでのセッション開始 - Amazon Cognito

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

SAML Amazon Cognito ユーザープールでのセッション開始

Amazon Cognito は、サービスプロバイダー主導 (SP 開始) シングルサインオン (SSO) と IdP 開始 をサポートしていますSSO。セキュリティのベストプラクティスとして、ユーザープールSSOに SP 開始を実装します。 SAML V2.0 技術概要のセクション 5.1.2 では、SP 主導の について説明しますSSO。Amazon Cognito は、アプリケーションの ID プロバイダー (IdP) です。アプリケーションは、認証されたユーザーのトークンを取得するサービスプロバイダー (SP) です。ただし、サードパーティー IdP を使用してユーザーを認証する場合、Amazon Cognito は SP です。SAML 2.0 ユーザーが SP 主導のフローで認証する場合は、まず Amazon Cognito にリクエストを行い、認証のために IdP にリダイレクトする必要があります。

一部のエンタープライズユースケースでは、内部アプリケーションへのアクセスは Enterprise IdP がホストするダッシュボードのブックマークから始まります。ユーザーがブックマークを選択すると、IdP はSAMLレスポンスを生成して SP に送信し、アプリケーションでユーザーを認証します。

ユーザープールで SAML IdP を設定して、IdP 開始 をサポートできますSSO。IdP 開始認証をサポートしている場合、Amazon Cognito はSAMLリクエストを使用して認証を開始しないため、Amazon Cognito は受信したSAMLレスポンスをリクエストしたことを確認できません。SP 開始 ではSSO、Amazon Cognito は元のリクエストに対するSAMLレスポンスを検証する状態パラメータを設定します。SP 開始サインインを使用すると、クロスサイトリクエストの偽造 () を防ぐこともできますCSRF。

SP 開始SAMLサインインの使用

ベストプラクティスとして、ユーザープールに service-provider-initiated (SP 開始) サインインを実装します。Amazon Cognito はユーザーのセッションを開始し、IdP にリダイレクトします。この方法では、サインインリクエストを提示するユーザーを最も制御できます。特定の条件下で IdP 開始サインインを許可することもできます。

以下のプロセスは、ユーザーがSAMLプロバイダーを通じてユーザープールへの SP 開始サインインを完了する方法を示しています。

Amazon Cognito SP 開始SAMLサインインの認証フロー図。
  1. ユーザーはサインインページで E メールアドレスを入力します。ユーザーの IdP へのリダイレクトを確認するには、カスタムアプリケーションで E メールアドレスを収集するか、ウェブビューでホストされた UI を呼び出します。ホストされた UI を設定して、 のリストを表示する IdPs か、E メールアドレスのみを求めるようにすることができます。

  2. アプリはユーザープールリダイレクトエンドポイントを呼び出し、アプリに対応するクライアント ID とユーザーに対応する IdP ID を持つセッションをリクエストします。

  3. Amazon Cognito は、 AuthnRequest要素でオプションで署名された SAML リクエストを使用して、ユーザーを IdP にリダイレクトします。

  4. IdP は、インタラクティブに、またはブラウザ Cookie で記憶されたセッションを使用してユーザーを認証します。

  5. IdP は、ペイPOSTロード内のオプションで暗号化されたSAMLアサーションを使用して、ユーザーをユーザープールSAMLレスポンスエンドポイントにリダイレクトします。

    注記

    Amazon Cognito は、5 分以内にレスポンスを受信しないセッションをキャンセルし、ホストされた UI にユーザーをリダイレクトします。ユーザーがこの結果を経験すると、Something went wrongエラーメッセージを受け取ります。

  6. SAML アサーションを検証し、レスポンスのクレームからユーザー属性をマッピングすると、Amazon Cognito はユーザープールでユーザーのプロファイルを内部的に作成または更新します。通常、ユーザープールはユーザーのブラウザセッションに認証コードを返します。

  7. ユーザーは、認証コードをアプリケーションに提示します。アプリケーションはコードをJSONウェブトークン () と交換しますJWTs。

  8. アプリはユーザーの ID トークンを認証として受け入れて処理し、アクセストークンを使用してリソースへの承認されたリクエストを生成し、更新トークンを保存します。

ユーザーが認証コード許可を認証して受け取ると、ユーザープールは ID、アクセス、および更新トークンを返します。ID トークンは、 OIDCベースの ID 管理用の認証オブジェクトです。アクセストークンは、スコープが OAuth2.0 の認証オブジェクトです。更新トークンは、ユーザーの現在のトークンの有効期限が切れたときに新しい ID トークンとアクセストークンを生成するオブジェクトです。ユーザープールアプリケーションクライアントでユーザーのトークンの期間を設定できます。

更新トークンの期間を選択することもできます。ユーザーの更新トークンの有効期限が切れたら、再度サインインする必要があります。SAML IdP を介して認証された場合、ユーザーのセッション期間は、IdP とのセッションの有効期限ではなく、トークンの有効期限によって設定されます。アプリは、各ユーザーの更新トークンを保存し、有効期限が切れたらセッションを更新する必要があります。ホストされた UI は、1 時間有効なブラウザ Cookie でユーザーセッションを維持します。

IdP 開始SAMLサインインの使用

IdP 開始 SAML 2.0 サインイン用に ID プロバイダーを設定すると、 でセッションを開始することなく、ユーザープールドメイン内のsaml2/idpresponseエンドポイントにアSAMLサーションを提示できます認可エンドポイント。この設定を持つユーザープールは、リクエストされたアプリケーションクライアントがサポートするユーザープールの外部 ID プロバイダーからの IdP 開始SAMLアサーションを受け入れます。次の手順では、IdP 開始 SAML 2.0 プロバイダーを設定してサインインする全体的なプロセスについて説明します。

  1. ユーザープールとアプリケーションクライアントを作成または指定します。

  2. ユーザープールに SAML 2.0 IdP を作成します。

  3. IdP 開始をサポートするように IdP を設定します。IdP 主導では、他のSSOプロバイダーが対象とならないセキュリティ上の考慮事項SAMLが導入されています。このため、IdP 開始サインインを持つSAMLプロバイダーを使用するアプリケーションクライアントにSAML IdPs、ユーザープール自体を含む 以外の を追加することはできません。

  4. IdP 開始SAMLプロバイダーをユーザープール内のアプリケーションクライアントに関連付けます。

  5. IdP SAML のサインインページにユーザーを誘導し、SAMLアサーションを取得します。

  6. SAML アサーションを使用してユーザープールsaml2/idpresponseエンドポイントにユーザーを誘導します。

  7. JSON ウェブトークン () を受信しますJWTs。

ユーザープールで一方的なSAMLアサーションを受け入れるには、アプリケーションセキュリティへの影響を考慮する必要があります。リクエストスプーフィングとCSRF試行は、IdP 開始リクエストを受け入れるときに行われる可能性があります。ユーザープールは IdP 開始のサインインセッションを検証できませんが、Amazon Cognito はリクエストパラメータとSAMLアサーションを検証します。

さらに、SAMLアサーションにInResponseToクレームが含まれておらず、過去 6 分以内に発行されたものでなければなりません。

IdP で開始されたリクエストSAMLを に送信する必要があります/saml2/idpresponse。SP 主導のホストされた UI 認証リクエストの場合、リクエストされたアプリケーションクライアント、スコープ、リダイレクト URI、およびその他の詳細をHTTP GETリクエストのクエリ文字列パラメータとして識別するパラメータを指定する必要があります。ただし、IdP が開始するSAMLアサーションの場合、リクエストの詳細はHTTP POSTリクエスト本文のRelayStateパラメータとしてフォーマットする必要があります。リクエスト本文には、SAMLアサーションをSAMLResponseパラメータとして含める必要があります。

以下は、IdP 開始SAMLプロバイダーのリクエスト例です。

POST /saml2/idpresponse HTTP/1.1 User-Agent: USER_AGENT Accept: */* Host: example.auth.us-east-1.amazoncognito.com Content-Type: application/x-www-form-urlencoded SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone HTTP/1.1 302 Found Date: Wed, 06 Dec 2023 00:15:29 GMT Content-Length: 0 x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb Location: https://www.example.com?code=[Authorization code]
AWS Management Console
IdP 開始の IdP を設定するには SAML
  1. ユーザープール アプリケーションクライアント 、および SAML ID プロバイダーを作成します。

  2. 関連付けられている場合は、すべてのソーシャルプロバイダーと OIDC ID プロバイダーをアプリケーションクライアントから関連付け解除します。

  3. ユーザープールのサインインエクスペリエンスタブに移動します。

  4. フェデレーティッド ID プロバイダーのサインイン で、SAMLプロバイダーを編集または追加します。

  5. IdP が開始したSAMLサインイン で、SP が開始したアサーションと IdP が開始したSAMLアサーションを受け入れる を選択します。

  6. [Save changes] (変更の保存) をクリックします。

API/CLI

IdP 開始の IdP を設定するには SAML

CreateIdentityProvider または UpdateIdentityProviderAPIリクエストの IDPInitパラメータSAMLで開始された IdP を設定します。以下は、IdP 開始 をサポートする IdP ProviderDetailsの例ですSAML。

"ProviderDetails": { "MetadataURL" : "https://myidp.example.com/saml/metadata", "IDPSignout" : "true", "RequestSigningAlgorithm" : "rsa-sha256", "EncryptedResponses" : "true", "IDPInit" : "true" }