通过第三方添加用户池登录 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

通过第三方添加用户池登录

您的应用程序用户可以通过用户池直接登录,也可以通过第三方身份提供商(IdP)联合。用户池管理处理通过Facebook、谷歌、亚马逊和苹果进行社交登录以及从OpenID Connect(OIDC)和SAML返回的代币的开销。 IdPs借助内置的托管网络用户界面,Amazon Cognito 为所有经过身份验证的用户提供令牌处理和管理。 IdPs这样,后端系统可以基于一组用户池令牌实现标准化。

联合登录在 Amazon Cognito 用户群体中的工作方式

通过第三方(联合身份验证)进行登录可在 Amazon Cognito 用户池中实现。此特征不依赖于通过 Amazon Cognito 身份池(联合身份)实现的联合身份验证。


                社交登录的身份验证概述

Amazon Cognito 是用户目录和 OAuth 2.0 身份提供者 (IdP)。当您以本地用户身份登录 Amazon Cognito 目录时,您的用户群体是应用程序的 IdP。本地用户仅存在于您的用户池目录中,无需通过外部 IdP 进行联合身份验证。

当你将 Amazon Cognito 连接到社交、SAML 或 OpenID Connect (OIDC IdPs) 时,你的用户池充当了多个服务提供商和你的应用程序之间的桥梁。对于您的 IdP 而言,Amazon Cognito 是服务提供商 (SP)。你将 OIDC ID 令牌或 SAML 声明 IdPs 传递给 Amazon Cognito。Amazon Cognito 会在令牌或断言中读取有关您用户的声明,并将这些声明映射到用户群体目录中的新用户配置文件。

然后,Amazon Cognito 在其自己的目录中为联合用户创建用户配置文件。Amazon Cognito 根据来自 IdP 的声明向用户添加属性。对于 OIDC 和社交身份提供者,则向 IDP 运营的公有 userinfo 端点添加属性。当映射的 IdP 属性发生变化时,用户的属性会在用户群体中发生变化。您还可以添加更多属性,这些属性独立于 IdP 中的属性。

Amazon Cognito 为联合用户创建配置文件后,它会更改其功能并将自己显示为应用程序的 IdP(现在是 SP)。Amazon Cognito 是 OIDC 和 OAuth 2.0 IdP 的组合。它生成访问令牌、ID 令牌和刷新令牌。有关令牌的更多信息,请参阅将令牌与用户池结合使用

您必须设计一个与 Amazon Cognito 集成的应用程序,以便对用户进行身份验证和授权,无论是联合用户还是本地用户。

应用程序作为 Amazon Cognito 的服务提供者的责任

验证和处理令牌中的信息

在大多数情况下,Amazon Cognito 将经过身份验证的用户重新导向到它附加了授权码的应用程序 URL。您的应用程序将此代码交换为访问权限、ID 和刷新令牌。然后,它必须检查令牌的有效性,并根据令牌中的声明向用户提供信息。

使用 Amazon Cognito API 请求响应身份验证事件

您的应用程序必须与 Amazon Cognito 用户群体 API身份验证 API 端点集成。身份验证 API 会将用户进行登录和注销,并管理令牌。用户群体 API 具有多种操作,用于管理您的用户群体、用户以及身份验证环境的安全性。当应用程序收到来自 Amazon Cognito 的响应时,它必须知道下一步该怎么做。

关于 Amazon Cognito 用户群体第三方登录需要了解的事项

  • 如果您希望用户使用联合提供商登录,则必须选择域。这将设置 Amazon Cognito 托管 UI 以及托管 UI 和 OIDC 端点。有关更多信息,请参阅将您自己的域用于托管 UI

  • 您无法使用 InitiateAuth和之类的 API 操作登录联合用户AdminInitiateAuth。联合用户只能使用登录端点对端点授权进行登录。

  • 对端点授权重定向端点。如果您在请求中提供 idp_identifieridentity_provider 参数,它将绕过托管 UI,以静默方式重定向到您的 IdP。否则,它会重定向到托管 UI 登录端点。有关示例,请参阅示例场景:在企业控制面板中为 Amazon Cognito 应用程序添加书签

  • 当托管 UI 将会话重定向到联合 IdP 时,Amazon Cognito 会在请求中包含 user-agent 标头 Amazon/Cognito

  • Amazon Cognito 从固定标识符和 IdP 名称的组合中派生联合用户配置文件的 username 属性。要生成符合自定义要求的用户名,请创建到 preferred_username 属性的映射。有关更多信息,请参阅有关映射的需知信息

    例如:MyIDP_bob@example.com

  • Amazon Cognito 将有关联合用户身份的信息记录到属性中,并在 ID 令牌中记录一个称为 identities 的声明。此声明包含用户的提供商以及提供商提供的唯一 ID。您无法直接在用户配置文件中更改 identities 属性。有关如何关联联合用户的更多信息,请参阅将联合用户与现有用户配置文件关联

  • 当您在 UpdateIdentityProvider API 请求中更新 IdP 时,您的更改最多可能需要一分钟才能显示在托管 UI 中。

  • Amazon Cognito 支持在其自身与您的 IdP 之间最多 20 个 HTTP 重定向。

  • 当您的用户使用托管 UI 登录时,用户的浏览器会存储一个加密的登录会话 cookie,用于记录用户登录时使用的客户端和提供者。如果用户尝试使用相同的参数再次登录,则托管 UI 会重复使用任何未过期的现有会话,并且用户无需再次提供凭证即可进行身份验证。如果用户使用不同的 IdP 再次登录,包括切换到本地用户群体登录或从本地用户群体登录进行切换,则他们必须提供凭证并生成新的登录会话。

    您可以将任何用户池分配 IdPs 给任何应用程序客户端,并且用户只能使用您分配给其应用程序客户端的 IdP 登录。