使用 IDP 啟動SAML的登入 - Amazon Cognito

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 IDP 啟動SAML的登入

當您為 IDP 起始的 SAML 2.0 登入設定身分識別提供者時,您可以SAML向使用者集區網域中的saml2/idpresponse端點提出宣告,而不需要在. 授權端點 具有此設定的使用者集區會接受來自要求應用程式用戶端支援之使用者集區外部身分識別提供者的 IDP 起始SAML宣告。下列步驟說明使用 IDP 起始 SAML 2.0 提供者設定和登入的整體程序。

  1. 建立或指定使用者集區和應用程式用戶端。

  2. 在您的使用者集區中建立 SAML 2.0 IdP。

  3. 設定您的 IdP 以支援 IdP 初始化。IDP 啟動SAML引入了其他SSO提供者不受限制的安全性考量。因此,您不能將非(包括用戶池本身)添加到使用具有 IDP 啟動登錄的SAML提供程序的任何應用程序客戶端。SAML IdPs

  4. 將 IDP 起始的SAML提供者與使用者集區中的應用程式用戶端建立關聯。

  5. 將您的使用者導向至 SAML IdP 的登入頁面,並擷取SAML宣告。

  6. 使用他們的SAML斷言將您的用戶定向到您的用戶池saml2/idpresponse端點。

  7. 接收JSON網絡令牌(JWTs)。

要在用戶池中接受未經請求的SAML斷言,您必須考慮其對應用程序安全性的影響。當您接受 IDP 起始的要求時,可能會造成要求詐騙和CSRF嘗試。雖然您的使用者集區無法驗證 IDP 起始的登入工作階段,但 Amazon Cognito 會驗證您的請求參數和宣告。SAML

此外,您的SAML斷言不得包含InResponseTo索賠,並且必須在之前的 6 分鐘內發出。

您必須將 IDP 起始的請求提交SAML給您的. /saml2/idpresponse 對於 SP 起始和託管的 UI 授權請求,您必須提供參數,以識別請求的應用程序客戶端,範圍URI,重定向和其他詳細信息作為請求中HTTP GET的查詢字符串參數。但是,對於 IDP 起始的SAML宣告,請求的詳細資訊必須在要求主體中格式化為RelayState參數。HTTP POST請求主體還必須包含您的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身分識別提供者。

  2. 取消所有社交和OIDC身份提供商與您的應用程序客戶端(如果有關聯)的關聯。

  3. 導覽至使用者集區的 [登入體驗] 索引標籤。

  4. 在 [聯合身分識別提供者登入] 下,編輯或新增SAML提供者。

  5. IDP 起始的SAML登入下,選擇接受 SP 起始和 IDP 起始的宣告。SAML

  6. 選擇儲存變更

API/CLI

若要設定 IdP 起始的 IdP SAML

設定使用CreateIdentityProviderUpdateIdentityProviderAPI要求中SAML的IDPInit參數啟動 IdP。以下是支援 IdP 啟動ProviderDetails的 IdP 範例。SAML

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