OIDC 用户池 IdP 身份验证流程 - Amazon Cognito

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

OIDC 用户池 IdP 身份验证流程

通过 OpenID Connect(OIDC)登录,您的用户池会自动执行身份提供者(IdP)的授权码登录流程。您的用户使用其 IdP 完成登录后,Amazon Cognito 会在外部提供商的 oauth2/idpresponse 端点收集他们的代码。借助生成的访问令牌,您的用户池查询 IdP userInfo 端点以检索用户属性。然后,您的用户池将收到的属性与您设置的属性映射规则进行比较,并相应地填入用户的配置文件和 ID 令牌。

您在 OIDC 提供商配置中请求的 OAuth 2.0 范围定义了 IdP 向 Amazon Cognito 提供的用户属性。作为一项最佳安全实践,请仅请求与要映射到用户池的属性相对应的范围。例如,如果您的用户池请求 openid profile,您将获得所有可能的属性,但是如果您请求 openid email phone_number,则只能获得用户的电子邮件地址和电话号码。您可以将向 OIDC 请求的范围配置 IdPs为与您在应用程序客户端和用户池身份验证请求中授权和请求的范围不同。

当您的用户使用 OIDC IdP 登录您的应用程序时,您的用户池执行以下身份验证流程。

  1. 您的用户将登录 Amazon Cognito 内置登录页面,并获得通过 OIDC IdP(如 Salesforce)登录的选项。

  2. 您的用户将重定向到 OIDC IdP 的 authorization 终端节点。

  3. 在您的用户进行身份验证后,OIDC IdP 将使用授权代码重定向至 Amazon Cognito。

  4. Amazon Cognito 与 OIDC IdP 交换此授权代码以获得访问令牌。

  5. Amazon Cognito 在您的用户池中创建或更新用户账户。

  6. Amazon Cognito 颁发应用程序持有者令牌,可能包括身份令牌、访问令牌和刷新令牌。

用户池 OIDC IdP 身份验证流程
注意

Amazon Cognito 会取消未在 5 分钟内完成的身份验证请求,并将用户重定向到托管登录。页面随即显示 Something went wrong 错误消息。

OIDC 是 OAuth 2.0 之上的身份层,它指定由 IdPs OIDC 客户端应用程序(依赖方)颁发的 JSON 格式 (JWT) 身份令牌。有关将 Amazon Cognito 添加为 OIDC 信赖方的信息,请参阅适用于您 OIDC IdP 的文档。

当用户使用授权码授予进行身份验证时,用户群体将返回 ID、访问权限和刷新令牌。ID 令牌是用于身份管理的标准 OIDC 令牌,访问令牌是标准 OAuth 2.0 令牌。有关您的用户群体应用程序客户端可以支持的授权类型的更多信息,请参阅对端点授权

用户群体如何处理来自 OIDC 提供者的声明

当您的用户通过第三方 OIDC 提供商完成登录时,托管登录会从 IdP 检索授权码。用户群体会与 IdP 的 token 端点交换访问令牌和 ID 令牌的授权码。用户群体不会将这些令牌传递给用户或应用程序,而是使用它们来构建用户配置文件,其中包含用户群体在声明中以其自己的令牌表示的数据。

Amazon Cognito 不会独立验证访问令牌。相反,它会从提供者 userInfo 端点请求用户属性信息,如果令牌无效,则该请求会被拒绝。

Amazon Cognito 通过以下检查来验证提供者 ID 令牌:

  1. 检查提供者是否使用以下集合中的算法对令牌进行了签名:RSA、HMAC、椭圆曲线。

  2. 如果提供者使用非对称签名算法对令牌进行了签名,请检查令牌 kid 声明中的签名密钥 ID 是否在提供者 jwks_uri 端点上列出。

  3. 根据提供者元数据,将 ID 令牌签名与预期的签名进行比较。

  4. iss 声明与为 IdP 配置的 OIDC 颁发者进行比较。

  5. 比较 aud 声明是否与在 IdP 上配置的客户端 ID 相匹配,或者,如果 aud 声明中有多个值,则声明包含所配置的客户端 ID。

  6. 检查 exp 声明中的时间戳不早于当前时间。

用户群体会验证 ID 令牌,然后尝试使用提供者访问令牌向提供者 userInfo 端点发出请求。此请求检索访问令牌中的范围授权它读取的任何用户配置文件信息。然后,用户群体将搜索您在用户群体中根据需要设置的用户属性。您必须在提供者配置中为必需的属性创建属性映射。用户群体会检查提供者 ID 令牌和 userInfo 响应。用户群体将所有与映射规则匹配的声明写入用户群体用户配置文件中的用户属性。用户群体会忽略与映射规则匹配、但不是必需且在提供者的声明中找不到的属性。