本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用第三方身份提供者进行用户池登录
您的应用程序用户可以通过用户池直接登录,也可以通过第三方身份提供者(IdP)进行联合身份验证。用户池管理处理通过Facebook、谷歌、亚马逊和苹果进行社交登录以及从OpenID Connect(OIDC)和SAML返回的代币的开销。 IdPs借助内置的托管网络用户界面,Amazon Cognito 为所有 IdPs经过身份验证的用户提供代币处理和管理。这样,后端系统可以基于一组用户池令牌实现标准化。
联合登录在 Amazon Cognito 用户池中的工作方式
Sign-in 亚马逊 Cognito 用户池中提供通过第三方(联盟)提供的服务。此功能不依赖于通过 Amazon Cognito 身份池(联合身份)实现的联合身份验证。
Amazon Cognito 是用户目录和 OAuth 2.0 身份提供者 (IdP)。当您以本地用户身份登录 Amazon Cognito 目录时,您的用户池是应用程序的 IdP。本地用户仅存在于您的用户池目录中,无需通过外部 IdP 进行联合身份验证。
当您将亚马逊 Cognito 连接到社交、SAML 或 OpenID Connect (OIDC) 时 IdPs,您的用户池充当多个服务提供商和您的应用程序之间的桥梁。对于您的 IdP 而言,Amazon Cognito 是服务提供商 (SP)。您 IdPs 将 OIDC ID 令牌或 SAML 声明传递给亚马逊 Cognito。Amazon Cognito 会在令牌或断言中读取有关您用户的声明,并将这些声明映射到用户池目录中的新用户配置文件。
然后,Amazon Cognito 在其自己的目录中为联合用户创建用户配置文件。Amazon Cognito 根据您的 IdP 的声明为您的用户添加属性,对于 OIDC 和社交身份提供商,还会添加公共终端节点。 IdP-operated userinfo当映射的 IdP 属性发生变化时,用户的属性会在用户池中发生变化。您还可以添加更多属性,这些属性独立于 IdP 中的属性。
Amazon Cognito 为联合用户创建配置文件后,它会更改其功能并将自己显示为应用程序的 IdP(现在是 SP)。Amazon Cognito 是 OIDC 和 OAuth 2.0 IdP 的组合。它生成访问令牌、ID 令牌和刷新令牌。有关令牌的更多信息,请参阅了解用户池 JSON Web 令牌(JWT)。
您必须设计一个与 Amazon Cognito 集成的应用程序,以便对用户进行身份验证和授权,无论是联合用户还是本地用户。
应用程序作为 Amazon Cognito 的服务提供者的责任
- 验证和处理令牌中的信息
-
在大多数情况下,Amazon Cognito 将经过身份验证的用户重新导向到它附加了授权码的应用程序 URL。您的应用程序将此代码交换为访问权限、ID 和刷新令牌。然后,它必须检查令牌的有效性,并根据令牌中的声明向用户提供信息。
- 使用 Amazon Cognito API 请求响应身份验证事件
-
您的应用程序必须与 Amazon Cognito 用户池 API 和身份验证 API 端点集成。身份验证 API 会将用户进行登录和注销,并管理令牌。用户池 API 具有多种操作,用于管理您的用户池、用户以及身份验证环境的安全性。当应用程序收到来自 Amazon Cognito 的响应时,它必须知道下一步该怎么做。
关于 Amazon Cognito 用户池第三方登录需要了解的事项
-
如果您希望用户使用联合提供商登录,则必须选择域。这将设置托管登录页面。有关更多信息,请参阅 使用您自己的域进行托管登录。
-
您无法使用 InitiateAuth和等 API 操作登录联合用户AdminInitiateAuth。当您使用 Amazon Cognito 的内置身份验证流程时,联合用户只能使用登录端点或登录。对端点授权如果你使用
CUSTOM_AUTH,你的触发器会控制结果。他们负责该服务是否向任何用户(无论是否联合)颁发令牌。 -
对端点授权 是重定向端点。如果您在请求中提供
idp_identifier或identity_provider参数,它将绕过托管登录,以静默方式重定向到您的 IdP。否则,将重定向到托管登录登录端点。 -
当托管登录将会话重定向到联合 IdP 时,Amazon Cognito 会在请求中包含
user-agent标头Amazon/Cognito。 -
Amazon Cognito 从固定标识符和 IdP 名称的组合中派生联合用户配置文件的
username属性。要生成符合自定义要求的用户名,请创建到preferred_username属性的映射。有关更多信息,请参阅 有关映射的需知信息。示例:
MyIDP_bob@example.com -
Amazon Cognito 会为您添加到用户池的每个 OIDC、SAML 和社交 IdP 创建一个用户组。该组的名称采用
[user pool ID]_[IdP name]格式,例如us-east-1_EXAMPLE_MYSSO或us-east-1_EXAMPLE_Google。每个自动生成的唯一 IdP 用户配置文件都会自动添加到该组。关联用户不会自动添加到该组,但您可以通过另外的流程将其配置文件添加到该组。 -
Amazon Cognito 将有关联合用户身份的信息记录到属性中,并在 ID 令牌中记录一个称为
identities的声明。此声明包含用户的提供商以及提供商提供的唯一 ID。您无法直接在用户配置文件中更改identities属性。有关如何关联联合用户的更多信息,请参阅将联合用户与现有用户配置文件关联。 -
当您在 UpdateIdentityProvider API 请求中更新 IdP 时,您的更改最多可能需要一分钟才能显示在托管登录中。
-
Amazon Cognito 支持在其自身与您的 IdP 之间最多 20 个 HTTP 重定向。
-
当您的用户使用托管登录进行登录时,透明度浏览器会存储一个加密的登录会话 Cookie,用于记录用户登录时使用的客户端和提供者。如果用户尝试使用相同的参数再次登录,则托管登录会重复使用任何未过期的现有会话,并且用户无需再次提供凭证即可进行身份验证。如果用户使用不同的 IdP 再次登录,包括切换到本地用户池登录或从本地用户池登录进行切换,则他们必须提供凭证并生成新的登录会话。
您可以将任何用户池分配 IdPs 给任何应用程序客户端,并且用户只能使用您分配给其应用程序客户端的 IdP 登录。