SAML签名和加密 - Amazon Cognito

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

SAML签名和加密

SAML2.0 登录是围绕应用程序的用户构建的,该用户是其身份验证流程中的请求和响应的承载者。您可能需要确保用户不会在传输过程中阅读或修改这些SAML文档。为此,请向用户池中的SAML身份提供者 (IdPs) 添加SAML签名和加密。通过SAML签名,您的用户池将签名添加到SAML登录和注销请求中。使用您的用户池公钥,您的 IdP 可以验证它是否收到未经SAML修改的请求。然后,当你的 IdP 响应并将SAML断言传递给用户的浏览器会话时,IdP 可以加密该响应,这样用户就无法检查自己的属性和权利。

对于SAML签名和加密,用户池操作期间的所有加密操作都必须使用 Ama SAML zon Cognito 生成的 user-pool-provided 密钥生成签名和密文。目前,您无法将用户池配置为使用外部密钥签署请求或接受加密断言。

注意

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

接受来自你的 IdP 的加密SAML回复

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

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

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

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

  3. I SAML dP 登录您的用户并生成响应。SAMLIdP 使用公钥对响应进行加密,并将您的用户重定向到您的用户池终端节点。/saml2/idpresponseIdP 必须按照 SAML 2.0 规范的定义对响应进行加密。有关更多信息,请参阅OASIS安全断Element <EncryptedAssertion>言标记语言的断言和协议 () 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. 在用户池的登录体验选项卡中,在联合身份提供商登录下,选择您的 I SAML dP,然后选择查看加密证书。

  4. 选择下载为.crt 并将下载的文件提供给您的 Id SAML P。将您的 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 Cogn SAML ito SP 发起的登录的一项安全优势。每个拥有域的用户池都会收到一个用户池 X.509 签名证书。使用此证书中的公钥,用户池将加密签名应用于您的用户池在用户选择 Id SAML P 时生成的注销请求。您可以选择将应用程序客户端配置为SAML登录请求。当您签署SAML请求时,您的 IdP 可以检查请求XML元数据中的签名是否与您提供的用户池证书中的公钥相匹配。

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

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

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

  4. 选择下载为.crt 并将下载的文件提供给您的 Id SAML P。配置您的 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" }