

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

# SAML 簽署和加密
<a name="cognito-user-pools-SAML-signing-encryption"></a>

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

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

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

**Topics**
+ [從 IdP 接受加密的 SAML 回應](#cognito-user-pools-SAML-encryption)
+ [簽署 SAML 請求](#cognito-user-pools-SAML-signing)

## 從 IdP 接受加密的 SAML 回應
<a name="cognito-user-pools-SAML-encryption"></a>

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

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

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

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

1. SAML IdP 會在您的使用者中登入並產生 SAML 回應。IdP 會使用公有金鑰加密回應，並將您的使用者重新導向至您的使用者集區`/saml2/idpresponse`端點。IdP 必須加密 SAML 2.0 規格定義的回應。如需詳細資訊，請參閱 `Element <EncryptedAssertion>` [OASIS 安全性聲明標記語言 (SAML) V2.0 的聲明和通訊協定。](https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf)

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

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

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

------
#### [ AWS 管理主控台 ]

**設定 SAML 回應加密**

1. 建立[使用者集區](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)、[應用程式用戶端](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html)和 SAML IdP。

1. 當您建立或編輯 SAML 身分提供者時，請在**簽署請求和加密回應**下，勾選標題**為需要此提供者加密 SAML 聲明**的核取方塊。

1. 從使用者集區的**社交和外部提供者**功能表中，選取您的 SAML IdP，然後選擇**檢視加密憑證**。

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

------
#### [ API/CLI ]

**設定 SAML 回應加密**

使用 [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) 或 [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) API 請求的 `EncryptedResponses` 參數設定回應加密。以下是支援請求簽署`ProviderDetails`的 IdP 範例。

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

若要從您的使用者集區取得加密憑證，請提出 [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html) API 請求，並在回應參數 `ActiveEncryptionCertificate`中擷取 的值`ProviderDetails`。儲存此憑證，並將其做為來自使用者集區的登入請求的加密憑證提供給 IdP。

------

## 簽署 SAML 請求
<a name="cognito-user-pools-SAML-signing"></a>

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

------
#### [ AWS 管理主控台 ]

**設定 SAML 請求簽署**

1. 建立[使用者集區](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)、[應用程式用戶端](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html)和 SAML IdP。

1. 當您建立或編輯 SAML 身分提供者時，請在**簽署請求和加密回應**下，勾選標題為**簽署 SAML 請求給此提供者**的核取方塊。

1. 從使用者集區的**社交和外部提供者**功能表中，選擇**檢視簽署憑證**。

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

------
#### [ API/CLI ]

**設定 SAML 請求簽署**

使用 [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) 或 [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) API 請求的 `RequestSigningAlgorithm` 參數設定請求簽署。以下是支援請求簽署`ProviderDetails`的 IdP 範例。

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

------