シングルサインアウトで SAML ユーザーをサインアウトする - Amazon Cognito

シングルサインアウトで SAML ユーザーをサインアウトする

Amazon Cognito は SAML 2.0 シングルログアウト (SLO) をサポートしています。SLO を使用すると、アプリケーションはユーザープールからサインアウトするときに、SAML ID プロバイダー (IdP) からユーザーをサインアウトできます。これにより、ユーザーがアプリケーションに再度サインインする場合は、SAML IdP で認証する必要があります。そうしない場合は、認証情報を提供する要件なくアプリケーションに渡す、IdP またはユーザープールブラウザの Cookie が設置される可能性があります。

サインアウトフローをサポートするように SAML IdP を設定すると、Amazon Cognito は、署名付き SAML ログアウトリクエストを使用してユーザーを IdP にリダイレクトします。Amazon Cognito は、IdP メタデータの SingleLogoutService URL からリダイレクト場所を決定します。Amazon Cognito は、ユーザープール署名証明書を使用してサインアウトリクエストに署名します。

Amazon Cognito SAML サインアウトの認証フロー図。ユーザーはサインアウトをリクエストし、Amazon Cognito は SAML サインアウトリクエストを使用してプロバイダーにリダイレクトします。

SAML セッションを持つユーザーをユーザープール /logout エンドポイントに誘導すると、Amazon Cognito は、次のリクエストで、IdP メタデータで指定された SLO エンドポイントに SAML ユーザーをリダイレクトします。

https://[SingleLogoutService endpoint]? SAMLRequest=[encoded SAML request]& RelayState=[RelayState]& SigAlg=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256& Signature=[User pool RSA signature]

その後、ユーザーは IdP から LogoutResponse を使用して saml2/logout エンドポイントに戻ります。IdP は HTTP POST リクエストで LogoutResponse を送信する必要があります。その後、Amazon Cognito は、最初のサインアウトリクエストからリダイレクト先にリダイレクトします。

SAML プロバイダーは、複数の AuthnStatement を含む LogoutResponse を送信する場合があります。このタイプのレスポンスの最初の AuthnStatementsessionIndex は、最初にユーザーを認証した SAML レスポンスの sessionIndex と一致する必要があります。sessionIndex が他の AuthnStatement にある場合、Amazon Cognito はセッションを認識せず、ユーザーはサインアウトされません。

AWS Management Console
SAML サインアウトを設定するには
  1. ユーザープールアプリケーションクライアント、および SAML IdP を作成します。

  2. SAML ID プロバイダーを作成または編集するときは、[ID プロバイダーに関する情報] で、[サインアウトフローを追加] というタイトルのチェックボックスをオンにします。

  3. ユーザープールの [サインインエクスペリエンス] タブから、[フェデレーション ID プロバイダーのサインイン] で IdP を選択し、[署名証明書] を見つけます。

  4. [.crt としてダウンロード] を選択します。

  5. SAML シングルログアウトをサポートし、署名をサポートするように SAML プロバイダーを設定し、ユーザープール署名証明書をアップロードします。IdP は、ユーザープールドメインの /saml2/logout にリダイレクトする必要があります。

API/CLI

SAML サインアウトを設定するには

CreateIdentityProvider API リクエストまたは UpdateIdentityProvider API リクエストの IDPSignout パラメータを使用してシングルログアウトを設定します。以下は、SAML シングルログアウトをサポートする IdP の ProviderDetails の例です。

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