OIDC 用户池 IdP 身份验证流程 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

OIDC 用户池 IdP 身份验证流程

当您的用户使用 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 分钟内完成的身份验证请求,并将用户重定向到托管 UI。页面随即显示 Something went wrong 错误消息。

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

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

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

当用户通过第三方 OIDC 提供者完成登录时,Amazon Cognito 托管 UI 会从 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 响应。用户群体将所有与映射规则匹配的声明写入用户群体用户配置文件中的用户属性。用户群体会忽略与映射规则匹配、但不是必需且在提供者的声明中找不到的属性。