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 内置登录页面,并可以选择通过 IdPOIDC(例如 Salesforce)登录。

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

  3. 在您的用户进行身份验证后,Id OIDC P 会使用授权码重定向到 Amazon Cognito。

  4. Amazon Cognito 使用授权码与 I OIDC dP 交换访问令牌。

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

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

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

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

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

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

用户池如何处理OIDC提供商的索赔

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

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

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

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

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

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

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

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

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

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