使用 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提供商不受制于的安全注意事项。因此,您不能向任何使用由 IDP 发起登录的SAML提供商的应用程序客户端添加非-SAML IdPs(包括用户池本身)。

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

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

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

  7. 接收JSON网络代币 (JWTs)。

要接受用户池中未经请求的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 启动配置 IdP SAML
  1. 创建用户池应用程序客户端和SAML身份提供商。

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

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

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

  5. IDP 发起的SAML登录下,选择接受 SP 发起的和 IdP 发起的断言。SAML

  6. 选择 Save changes(保存更改)

API/CLI

为 IdP 启动配置 IdP SAML

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

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