SAML 簽署和加密 - Amazon Cognito

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

SAML 簽署和加密

SAML 2.0 登入是以應用程式的使用者為基礎,作為其身分驗證流程中請求和回應的承載者。您可能想要確保使用者不會在傳輸中讀取或修改這些SAML文件。若要完成此操作,請將SAML簽署和加密新增至使用者集區中的SAML身分提供者 (IdPs)。SAML 簽署時,您的使用者集區會將簽章新增至SAML登入和登出請求。使用您的使用者集區公有金鑰,IdP 可以驗證其是否接收未修改的SAML請求。然後,當您的 IdP 回應並將SAML宣告傳遞給使用者的瀏覽器工作階段時,IdP 可以加密該回應,讓使用者無法檢查自己的屬性和權限。

透過SAML簽署和加密,使用者集區操作期間的所有密碼編譯SAML操作都必須使用 Amazon Cognito 產生的金鑰產生簽章和密碼文字 user-pool-provided。目前,您無法設定使用者集區以簽署請求或使用外部金鑰接受加密宣告。

注意

您的使用者集區憑證有效期為 10 年。每年一次,Amazon Cognito 會為您的使用者集區產生新的簽署和加密憑證。當您請求簽署憑證時,Amazon Cognito 會傳回最新的憑證,並使用最新的簽署憑證簽署請求。您的 IdP 可以使用任何未過期的使用者集區加密憑證來加密SAML宣告。您先前的憑證在整個持續時間內持續有效,而且公有金鑰不會在憑證之間變更。最佳實務是,每年在提供者組態中更新憑證。

接受來自 IdP 的加密SAML回應

當使用者登入和登出時,Amazon Cognito 和您的 IdP 可以在SAML回應中建立機密性。Amazon Cognito 會將公有私有RSA金鑰對和憑證指派給您在使用者集區中設定的每個外部SAML提供者。當您為使用者集區SAML提供者啟用回應加密時,您必須將憑證上傳到支援加密SAML回應的 IdP。在 IdP SAML 開始使用提供的金鑰加密所有SAML宣告之前,您的 IdP 使用者集區連線無法運作。

以下是加密SAML登入流程的概觀。

  1. 您的使用者開始登入並選擇其 SAML IdP 。

  2. 您的使用者集區會使用SAML登入請求將使用者授權端點重新導向至其 SAML IdP。您的使用者集區可以選擇性地伴隨此請求,並帶有 簽章,以啟用 IdP 的完整性驗證。當您想要簽署SAML請求時,您必須設定您的 IdP,以接受使用者集區已使用簽署憑證中的公有金鑰簽署的請求。

  3. IdP SAML 會在您的使用者中簽署並產生SAML回應。IdP 會使用公有金鑰加密回應,並將使用者重新導向至使用者集區/saml2/idpresponse端點。IdP 必須加密 2.0 SAML 規格定義的回應。如需詳細資訊,請參閱 Element <EncryptedAssertion> OASIS安全宣告標記語言 (SAML) V2.0 的宣告和通訊協定。

  4. 您的使用者集區會使用私有金鑰解密SAML回應中的密碼文字,並在您的使用者中簽署。

重要

當您在使用者集區中啟用 IdP SAML 的回應加密時,您的 IdP 必須使用提供者特有的公有金鑰加密所有回應。Amazon Cognito 不接受您設定為支援加密的SAML外部 IdP 的未加密SAML回應。

使用者集區中的任何外部 SAML IdP 都可以支援回應加密,且每個 IdP 都會收到自己的金鑰對。

AWS Management Console
設定SAML回應加密
  1. 建立使用者集區 應用程式用戶端 和 SAML IdP 。

  2. 當您建立或編輯SAML身分提供者時,請在簽署請求並加密回應 下,勾選標題為 需要此提供者的加密SAML宣告 的核取方塊。

  3. 從使用者集區的登入體驗索引標籤中,在聯合身分提供者登入 下,選取您的 SAML IdP,然後選擇檢視加密憑證

  4. 選擇下載為 .crt,並將下載的檔案提供給 SAML IdP 。設定您的 SAML IdP 以使用憑證中的 金鑰加密SAML回應。

API/CLI

若要設定SAML回應加密

使用 CreateIdentityProviderUpdateIdentityProviderAPI請求的 EncryptedResponses 參數設定回應加密。以下是支援請求簽署ProviderDetails的 IdP 範例。

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

若要從使用者集區取得加密憑證,請提出DescribeIdentityProviderAPI請求,並在回應參數 ActiveEncryptionCertificate中擷取 的值ProviderDetails。儲存此憑證,並將其作為來自使用者集區的登入請求的加密憑證提供給 IdP。

簽署SAML請求

向 IdP 證明 SAML 2.0 請求完整性的能力是 Amazon Cognito SP 啟動SAML登入的安全優勢。每個具有網域的使用者集區都會收到使用者集區 X.509 簽署憑證。使用此憑證中的公有金鑰,使用者集區會將密碼編譯簽章套用至使用者集區在使用者選取 SAML IdP 時產生的登出請求。您可以選擇性地設定應用程式用戶端以SAML登入請求 。當您簽署SAML請求時,IdP 可以檢查請求XML中繼資料中的簽章是否符合您提供的使用者集區憑證中的公有金鑰。

AWS Management Console
若要設定SAML請求簽署
  1. 建立使用者集區 應用程式用戶端 和 SAML IdP 。

  2. 當您建立或編輯SAML身分提供者時,請在簽署請求並加密回應 下,勾選具有向此提供者簽署SAML請求的標題 核取方塊。

  3. 從使用者集區的登入體驗索引標籤中,在聯合身分提供者登入 下,選擇檢視簽署憑證

  4. 選擇下載為 .crt,並將下載的檔案提供給 SAML IdP 。設定您的 SAML IdP 以驗證傳入SAML請求的簽章。

API/CLI

若要設定SAML請求簽署

使用 CreateIdentityProvider或 請求的 RequestSigningAlgorithm 參數設定UpdateIdentityProviderAPI請求簽署。以下是支援請求簽署ProviderDetails的 IdP 範例。

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