SAML 会话在 Amazon Cognito 用户池中启动 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

SAML 会话在 Amazon Cognito 用户池中启动

Amazon Cognito 支持由服务提供商启动(SP 启动)的单点登录 (SSO)。SAML V2.0 技术概述的第 5.1.2 节描述了 SP 启动的 SSO。Amazon Cognito 是您的应用程序的身份提供商 (IdP)。该应用程序是为经过身份验证的用户检索令牌的服务提供程序 (SP)。但是,当您使用第三方 IdP 对用户进行身份验证时,Amazon Cognito 就是 SP。使用 SAML IdP 进行身份验证的 Amazon Cognito 用户必须始终首先向 Amazon Cognito 发出请求并重定向到 IdP 进行身份验证。

对于某些企业使用案例,对内部应用程序的访问从企业 IdP 托管的控制面板上的书签开始。当用户选择书签时,IdP 会生成一个 SAML 响应并将其发送到 SP 以向应用程序验证用户身份。

Amazon Cognito 不支持 IdP 启动的 SSO。除非 Amazon Cognito 通过 SAML 请求启动身份验证,否则 Amazon Cognito 无法验证它是否已请求收到的 SAML 响应。

在企业控制面板中为 Amazon Cognito 应用程序添加书签

您可以在 SAML 或 OIDC IdP 控制面板中创建书签,提供对通过 Amazon Cognito 用户池进行身份验证的 Web 应用程序的 SSO 访问。您可以通过不要求用户使用托管 UI 登录的方式链接到 Amazon Cognito。为此,请根据以下模板构建一个指向 Amazon Cognito 用户池的 AUTHORIZATION 端点 的书签链接:

https://your_Amazon_Cognito_userpool_domain/authorize?response_type=code&identity_provider=your-SAML-IdP-name&client_id=your-client-id&redirect_uri=https://your_application_redirect_url

注意

您还可以在授权终端节点请求中使用 idp_identifier 参数而不是 identity_provider 参数。IdP 标识符是在用户池中创建身份提供商时可以配置的替代名称。请参阅选择 SAML 身份提供商名称

当您在对 /authorize 的请求中使用适当的参数时,Amazon Cognito 会静默开始 SP 启动的登录流程并将您的用户重定向到使用您的 IdP 登录。

下图显示了模拟 IdP 启动的 SSO 的身份验证流程。您的用户可以通过公司门户网站中的链接向 Amazon Cognito 进行身份验证。


                    从企业应用程序控制面板开始的 Amazon Cognito SAML 登录。

上传或链接来自提供商的元数据文档,以便在用户池中添加 SAML IdP。创建一个使用您的 SAML IdP 进行登录的应用程序客户端,并将您的应用程序的 URL 作为授权回调 URL。有关应用程序客户端的更多信息,请参阅配置用户池应用程序客户端

在尝试使用此解决方案向应用程序进行身份验证之前,请测试由 SP 发起的从托管 UI 向您的应用程序的登录。有关如何在 Amazon Cognito 中配置 SAML IdP 的更多信息,请参阅将第三方 SAML 身份提供商与 Amazon Cognito 用户池集成

满足这些要求后,为您的 /authorize 终端节点创建一个书签,其中包含 identity_provideridp_identifier 参数。上图说明了随后的过程。

  1. 您的用户登录 SSO IdP 控制面板。用户有权访问的企业应用程序将填充此控制面板。

  2. 您的用户选择指向应用程序的链接,该应用程序向 Amazon Cognito 进行身份验证。在许多 SSO 门户中,您都可以添加自定义应用程序链接。可用于创建指向 SSO 门户中公共 URL 的链接的任何功能都可以使用。

  3. SSO 门户中的自定义应用程序链接将用户定向到用户池 AUTHORIZATION 端点。该链接包括 response_typeclient_idredirect_uriidentity_provider 的参数。identity_provider 参数是您在用户池中提供 IdP 的名称。您还可以使用 idp_identifier 参数而不是 identity_provider 参数。用户通过包含 idp_identifieridentity_provider 参数的链接访问您的托管 UI。此用户绕过登录页面并直接导航以使用您的 IdP 进行身份验证。有关命名 SAML IdP 的更多信息,请参阅选择 SAML 身份提供商名称

    示例 URL:

    https://your_Amazon_Cognito_userpool_domain/authorize?response_type=code&identity_provider=your-SAML-IdP-name&client_id=your-client-id&redirect_uri=https://your_application_redirect_url

  4. Amazon Cognito 使用 SAML 请求将用户会话重定向到您的 IdP。

  5. 您的用户在登录控制面板时可能已收到 IdP 的会话 Cookie。您的 IdP 使用此 Cookie 以静默方式验证用户并使用 SAML 响应将其重定向到 Amazon Cognito idpresponse 终端节点。如果不存在活动会话,则 IdP 在发布 SAML 响应之前将对用户重新进行身份验证。

  6. Amazon Cognito 会验证 SAML 响应,并根据 SAML 断言创建或更新用户配置文件。

  7. Amazon Cognito 使用授权码将用户重定向到您的内部应用程序。您将内部应用程序 URL 配置为应用程序客户端的授权重定向 URL。

  8. 您的应用程序用授权码交换 Amazon Cognito 令牌。