本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SAML 会话在 Amazon Cognito 用户池中启动
Amazon Cognito 支持服务提供商发起的(SP 发起的)单点登录 (SSO) 和 IDP 发起的 SSO。作为最佳安全实践,请在您的用户池中实施 SP 启动的 SSO。SAML V2.0 技术概述
对于某些企业使用案例,对内部应用程序的访问从企业 IdP 托管的控制面板上的书签开始。当用户选择书签时,IdP 会生成一个 SAML 响应并将其发送到 SP 以向应用程序验证用户身份。
您可以在用户池中配置 SAML IdP 以支持 IdP 启动的 SSO。当你支持 IDP 发起的身份验证时,Amazon Cognito 无法验证它是否已请求收到的 SAML 响应,因为 Amazon Cognito 不会通过 SAML 请求启动身份验证。在 SP 发起的 SSO 中,Amazon Cognito 会设置状态参数,以验证针对原始请求的 SAML 响应。通过 SP 发起的登录,您还可以防范跨站请求伪造 (CSRF)。
有关如何在不希望用户与用户池托管用户界面交互的环境中构建 SAM 的示例,请参阅。示例场景:在企业控制面板中为 Amazon Cognito 应用程序添加书签
使用 IDP 发起的 SAML SSO
在为 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]