本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 IDP 发起的 SAML 登录
在为 IDP 发起的 SAML 2.0 登录配置身份提供商时,您可以向用户池域中的saml2/idpresponse
终端节点提供 SAML 断言,而无需在上启动会话。对端点授权具有此配置的用户池接受请求的应用程序客户端支持的用户池外部身份提供商发起 IdP 发起的 SAML 断言。以下步骤描述了配置和使用 IDP 启动的 SAML 2.0 提供商登录的整个过程。
-
创建或指定用户池和应用程序客户端。
-
在您的用户池中创建一个 SAML 2.0 IdP。
-
将您的 IdP 配置为支持 IdP 启动。IDP 发起的 SAML 引入了其他 SSO 提供商不受约束的安全注意事项。因此,您无法将非 SAML IdPs(包括用户池本身)添加到任何使用 SAML 提供商并通过 IDP 启动登录的应用程序客户端。
-
将 IDP 发起的 SAML 提供商与用户池中的应用程序客户端相关联。
-
将您的用户引导至 SAML IdP 的登录页面并检索 SAML 断言。
-
使用 SAML 断言将您的用户引导到您的用户池
saml2/idpresponse
终端节点。 -
接收 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]