SAML 签名和加密 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SAML 签名和加密

Amazon Cognito 支持签名的 SAML 请求以及用于登录和注销的加密 SAML 响应。用户池 SAML 操作期间的所有加密操作都必须使用 user-pool-provided Amazon Cognito 生成的密钥生成签名和密文。目前,您无法将用户池配置为使用外部密钥签署请求或接受加密断言。

注意

您的用户池证书有效期为 10 年。Amazon Cognito 每年都会为您的用户池生成一次新的签名和加密证书。当您请求签名证书时,Amazon Cognito 会返回最新的证书,并使用最新的签名证书对请求进行签名。您的 IdP 可以使用任何未过期的用户池加密证书对 SAML 断言进行加密。您之前的证书在整个有效期内继续有效,并且公钥在不同的证书之间不会发生变化。作为最佳实践,请每年更新提供商配置中的证书。

接受来自你的 IdP 的加密 SAML 响应

当用户登录和注销时,Amazon Cognito 和你的 IdP 可以在 SAML 响应中保密。Amazon Cognito 会向您在用户池中配置的每个外部 SAML 提供商分配一个公共 RSA 密钥对和一个证书。为用户池 SAML 提供者启用响应加密时,必须将证书上传到支持加密 SAML 响应的 IdP。在您的 IdP 开始使用提供的密钥加密所有 SAML 断言之前,您与 SAML IdP 的用户池连接无法正常工作。

以下是加密 SAML 登录流程的概述。

  1. 您的用户开始登录并选择他们的 SAML IdP。

  2. 您的用户池通过 SAML 登录请求对端点授权将您的用户重定向到他们的 SAML IdP。您的用户池可以选择在此请求中附上签名,该签名允许 IdP 进行完整性验证。要签署 SAML 请求时,必须将您的 IdP 配置为接受您的用户池使用签名证书中的公钥签署的请求。

  3. SAML IdP 登录您的用户并生成 SAML 响应。IdP 使用公钥对响应进行加密,并将您的用户重定向到您的用户池终端节点。/saml2/idpresponseIdP 必须按照 SAML 2.0 规范的定义对响应进行加密。有关更多信息,请参阅 Element <EncryptedAssertion> OASIS 安全断言标记语言 (SAML) V2.0 的断言和协议

  4. 您的用户池使用私钥解密 SAML 响应中的密文并登录您的用户。

重要

当您为用户池中的 SAML IdP 启用响应加密时,您的 IdP 必须使用该提供商特有的公钥对所有响应进行加密。Amazon Cognito 不接受来自您配置为支持加密的 SAML 外部 IdP 的未加密的 SAML 响应。

用户池中的任何外部 SAML IdP 都可以支持响应加密,并且每个 IdP 都会收到自己的密钥对。

Amazon Web Services 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" }

签署 SAML 请求

能够向你的 IdP 证明 SAML 2.0 请求的完整性是 Amazon Cognito SP 发起的 SAML 登录的一项安全优势。每个拥有域的用户池都会收到一个用户池 X.509 签名证书。使用此证书中的公钥,用户池将加密签名应用于您的用户池在用户选择 SAML IdP 时生成的注销请求。您可以选择将应用程序客户端配置为签署 SAML 登录请求。当您签署 SAML 请求时,您的 IdP 可以检查请求的 XML 元数据中的签名是否与您提供的用户池证书中的公钥相匹配。

Amazon Web Services Management Console
配置 SAML 请求签名
  1. 创建用户池应用程序客户端和 SAML IdP。

  2. 创建或编辑您的 SAML 身份提供商时,在 “签署请求并加密响应” 下,选中标题为 “向该提供商签署 SAML 请求” 的复选框。

  3. 在用户池的登录体验选项卡中,在联合身份提供商登录下,选择查看签名证书

  4. 选择下载为.crt,然后将下载的文件提供给您的 SAML IdP。配置您的 SAML IdP 以验证传入的 SAML 请求的签名。

API/CLI

配置 SAML 请求签名

使用CreateIdentityProviderUpdateIdentityProviderAPI 请求的RequestSigningAlgorithm参数配置请求签名。以下是支持请求签ProviderDetails名的 IdP 示例。

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