SAML 签名和加密
SAML 2.0 登录围绕着应用程序的用户作为其身份验证流程中的请求和响应的持有者来进行。您可能需要确保用户不会在传输过程中读取或修改这些 SAML 文档。为此,请向用户池中的 SAML 身份提供者(IdP)添加 SAML 签名和加密。借助 SAML 签名,您的用户池可向 SAML 登录和注销请求添加签名。使用您的用户池公钥,IdP 可以验证它接收的是未经修改的 SAML 请求。然后,当您的 IdP 响应并将 SAML 断言传递给用户的浏览器会话时,IdP 可以加密该响应,这样用户就无法查看自己的属性和权限。
借助 SAML 签名和加密,用户池 SAML 操作期间的所有加密操作都必须使用 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 登录的流程。
-
您的用户开始登录并选择他们的 SAML IdP。
-
您的用户池 对端点授权 通过 SAML 登录请求将您的用户重定向到他们的 SAML IdP。您的用户池可以选择在此请求中附上签名,从而让 IdP 可以进行完整性验证。当您想要签署 SAML 请求时,必须将您的 IdP 配置为接受您的用户池使用签名证书中的公钥签署的请求。
-
SAML IdP 让您的用户登录并生成 SAML 响应。IdP 使用公钥对响应进行加密,并将用户重定向到用户池
/saml2/idpresponse
端点。IdP 必须按照 SAML 2.0 规范的定义对响应进行加密。有关更多信息,请参阅 OASIS 安全断言标记语言(SAML)V2.0 的断言和协议中的 Element <EncryptedAssertion>
。 -
用户池使用私钥解密 SAML 响应中的加密文字并让您的用户登录。
重要
当您为用户池中的 SAML IdP 启用响应加密时,您的 IdP 必须使用该提供者特有的公钥对所有响应进行加密。Amazon Cognito 不接受来自您配置为支持加密的 SAML 外部 IdP 的未加密 SAML 响应。
用户池中的任何外部 SAML IdP 都可以支持响应加密,并且每个 IdP 都会收到自己的密钥对。
签署 SAML 请求
能够向您的 IdP 证明 SAML 2.0 请求的完整性是 Amazon Cognito SP 发起的 SAML 登录的一项安全优势。每个拥有域的用户池都会收到一个用户池 X.509 签名证书。使用此证书中的公钥,用户池将加密签名应用于在用户选择 SAML IdP 时用户池生成的注销请求。您可以选择将应用程序客户端配置为签署 SAML 登录请求。当您签署 SAML 请求时,您的 IdP 会核实请求的 XML 元数据中的签名是否与您提供的用户池证书中的公钥相匹配。