使用 IDP 发起的 SAML 登录 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 IDP 发起的 SAML 登录

在为 IDP 发起的 SAML 2.0 登录配置身份提供商时,您可以向用户池域中的saml2/idpresponse终端节点提供 SAML 断言,而无需在上启动会话。对端点授权具有此配置的用户池接受请求的应用程序客户端支持的用户池外部身份提供商发起 IdP 发起的 SAML 断言。以下步骤描述了配置和使用 IDP 启动的 SAML 2.0 提供商登录的整个过程。

  1. 创建或指定用户池和应用程序客户端。

  2. 在您的用户池中创建一个 SAML 2.0 IdP。

  3. 将您的 IdP 配置为支持 IdP 启动。IDP 发起的 SAML 引入了其他 SSO 提供商不受约束的安全注意事项。因此,您无法将非 SAML IdPs(包括用户池本身)添加到任何使用 SAML 提供商并通过 IDP 启动登录的应用程序客户端。

  4. 将 IDP 发起的 SAML 提供商与用户池中的应用程序客户端相关联。

  5. 将您的用户引导至 SAML IdP 的登录页面并检索 SAML 断言。

  6. 使用 SAML 断言将您的用户引导到您的用户池saml2/idpresponse终端节点。

  7. 接收 JSON 网络令牌 (JWT)。

要接受用户池中未经请求的 SAML 断言,必须考虑其对应用程序安全的影响。当您接受 IdP 发起的请求时,可能会出现请求欺骗和 CSRF 尝试。尽管您的用户池无法验证 IDP 发起的登录会话,但 Amazon Cognito 会验证您的请求参数和 SAML 断言。

此外,您的 SAML 声明不得包含InResponseTo索赔,并且必须在前 6 分钟内发出。

您必须使用 IDP 发起的 SAML 向您的提交请求。/saml2/idpresponse对于 SP 发起和托管的 UI 授权请求,您必须提供参数,将您请求的应用程序客户端、范围、重定向 URI 和其他详细信息标识为请求中的HTTP GET查询字符串参数。但是,对于 IDP 发起的 SAML 断言,您的请求的详细信息必须格式化为请求正文中的RelayState参数。HTTP POST请求正文还必须包含您的 SAML 断言作为参数。SAMLResponse

以下是对 IDP 发起的 SAML 提供商的请求示例。

POST /saml2/idpresponse HTTP/1.1 User-Agent: USER_AGENT Accept: */* Host: example.auth.us-east-1.amazoncognito.com Content-Type: application/x-www-form-urlencoded SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone HTTP/1.1 302 Found Date: Wed, 06 Dec 2023 00:15:29 GMT Content-Length: 0 x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb Location: https://www.example.com?code=[Authorization code]
Amazon Web Services Management Console
为 IdP 启动的 SAML 配置 IdP
  1. 创建用户池应用程序客户端和 SAML 身份提供商。

  2. 取消所有社交和 OIDC 身份提供商与您的应用程序客户端的关联(如果有)。

  3. 导航到用户池的 “登录体验” 选项卡。

  4. 在 “联合身份提供商登录” 下,编辑或添加 SAML 提供商。

  5. IDP 发起的 SAML 登录下,选择接受 SP 发起的、以及 IDP 发起的 SAML 断言。

  6. 选择保存更改

API/CLI

为 IdP 启动的 SAML 配置 IdP

使用CreateIdentityProviderUpdateIdentityProviderAPI 请求中的IDPInit参数配置 IDP 启动的 SAML。以下是支持 IdP 发起ProviderDetails的 SAML 的 IdP 示例。

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