本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SAML Amazon Cognito 使用者集區中的工作階段啟動
Amazon Cognito 支援服務供應商啟動 (SP 啟動) 單一登入 (SSO) 和 IdP 啟動 SSO。作為最佳實務,請在使用者集區SSO中實作 SP 啟動。 SAML V2.0 技術概觀
對於某些企業使用案例,存取內部應用程式是從在企業 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登入的身分驗證流程圖。](images/scenario-authentication-saml-stepbystep.png)
-
您的使用者會在登入頁面輸入其電子郵件地址。若要判斷使用者重新導向至其 IdP您可以在自訂應用程式中收集其電子郵件地址,或在 Web 檢視中叫用託管 UI。您可以設定託管 UI,以顯示 IdPs 或 的清單,以僅提示電子郵件地址。
-
您的應用程式會叫用您的使用者集區重新導向端點,並請求具有對應於應用程式的用戶端 ID 和對應於使用者的 IdP ID 的工作階段。
-
Amazon Cognito 會在
AuthnRequest
元素中使用SAML請求,選擇性地簽署 將使用者重新導向至 IdP。 -
IdP 會以互動方式驗證使用者,或在瀏覽器 Cookie 中使用記住的工作階段進行驗證。
-
IdP 會在使用者集區SAML回應端點POST的承載中使用選擇性加密的宣告來重新導向您的使用者。 SAML
注意
Amazon Cognito 會在 5 分鐘內取消未收到回應的工作階段,並將使用者重新導向至託管 UI。當您的使用者遇到此結果時,會收到
Something went wrong
錯誤訊息。 -
在驗證SAML聲明並從回應中的宣告映射使用者屬性之後,Amazon Cognito 會在內部建立或更新使用者集區中的使用者設定檔。一般而言,您的使用者集區會將授權碼傳回至使用者的瀏覽器工作階段。
-
您的使用者會向應用程式展示其授權碼,該應用程式會交換 JSON Web 權杖的程式碼 (JWTs)。
-
您的應用程式接受並處理使用者的 ID 權杖作為身分驗證,使用其存取權杖產生對資源的授權請求,並存放其重新整理權杖。
當使用者驗證並收到授權碼授予時,使用者集區會傳回 ID、存取和重新整理權杖。ID 權杖是 OIDC型身分管理的身分驗證物件。存取權杖是具有 OAuth2.0
您也可以選擇重新整理權杖的持續時間。使用者的重新整理權杖過期後,必須再次登入。如果使用者透過 SAML IdP 進行身分驗證,則使用者的工作階段持續時間會由其權杖到期而設定,而不是其工作階段與 IdP 的到期時間。您的應用程式必須儲存每個使用者的重新整理權杖,並在工作階段過期時更新其工作階段。託管 UI 會在瀏覽器 Cookie 中維護使用者工作階段,有效期間為 1 小時。
使用 IdP 啟動的SAML登入
當您為 IdP 啟動的 SAML 2.0 登入設定身分提供者時,您可以向使用者集區網域中的saml2/idpresponse
端點提出SAML宣告,而無需在 啟動工作階段授權端點。具有此組態的使用者集區接受來自所請求應用程式用戶端支援之使用者集區外部身分提供者的 IdP 啟動SAML宣告。下列步驟說明使用 IdP 啟動的 SAML 2.0 供應商設定和登入的整體程序。
-
建立或指定使用者集區和應用程式用戶端。
-
在使用者集區中建立 SAML 2.0 IdP。
-
設定您的 IdP 以支援 IdP 啟動。IdP 啟動SAML引入其他SSO供應商不受約束的安全考量。因此,您無法將非 SAML IdPs,包括使用者集區本身,新增至使用具有 IdP 起始登入之SAML提供者的任何應用程式用戶端。
-
將 IdP 啟動的SAML提供者與使用者集區中的應用程式用戶端建立關聯。
-
將使用者引導至 IdP SAML 的登入頁面,並擷取SAML宣告。
-
將使用者引導至具有SAML聲明的使用者集區
saml2/idpresponse
端點。 -
接收 JSON Web 權杖 (JWTs)。
若要在使用者集區中接受主動SAML宣告,您必須考量其對應用程式安全性的影響。當您接受 IdP 發起的請求時,可能會請求欺騙和CSRF嘗試。雖然您的使用者集區無法驗證 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]