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

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

重要

當您在使用者集區中啟用 SAML IdP 的回應加密時,您的 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 回應加密

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

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

若要從您的使用者集區取得加密憑證,請提出 DescribeIdentityProvider API 請求,並在回應參數 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 請求簽署

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

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