Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

向用户池添加 OIDC 身份提供商

您可允许已具有 OpenID Connect (OIDC) 身份提供商 (IdP)(如 SalesforcePing Identity)账户的用户跳过注册步骤,并使用现有账户登录您的应用程序。利用内置托管 Web UI,Amazon Cognito 将为所有经过身份验证的用户提供令牌处理和管理,让后端系统能够基于一组用户池令牌实现标准化。


                OIDC IdP 的身份验证概述

注意

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

可使用 AWS 管理控制台、AWS CLI 或用户池 API 方法 CreateIdentityProvider 向用户池添加 OIDC IdP。

先决条件

在开始之前,您需要:

  • 具有应用程序客户端和用户池域的用户池。有关更多信息,请参阅创建用户池

  • 一个 OIDC IdP。

步骤 1:向 OIDC IdP 注册

在使用 Amazon Cognito 创建 OIDC IdP 之前,必须向 OIDC IdP 注册应用程序才能接收客户端 ID 和客户端密钥。

向 OIDC IdP 注册

  1. 使用 OIDC IdP 创建开发人员账户。

    链接到 OIDC IdP

    OIDC IdP 如何安装 OIDC 发现 URL
    Salesforce

    安装 Salesforce 身份提供商

    https://login.salesforce.com

    Ping 身分

    安装 Ping Identity 身份提供商

    https://您的 Ping 域地址:9031/idp/userinfo.openid

    例如:https://pf.company.com:9031/idp/userinfo.openid

    Okta

    安装 Okta 身份提供商

    https://您的 Okta 子域.oktapreview.com

    或者 https://Your Okta subdomain.okta.com

    Microsoft Azure Active Directory (Azure AD)

    安装 Microsoft Azure AD 身份提供商

    https://login.windows.net/common

    Google

    安装 Google 身份提供商

    https://accounts.google.com

    注意

    Amazon Cognito 提供 Google 作为集成社交登录 IdP。建议使用此集成 IdP。请参阅 向用户池添加社交身份提供商

  2. 向 OIDC IdP 注册具有 /oauth2/idpresponse 终端节点的用户池域 URL。这将确保 OIDC IdP 之后在对用户进行身份验证时通过 Amazon Cognito 接受此 URL。

    https://<your-user-pool-domain>/oauth2/idpresponse
  3. 向 OIDC IdP 注册回调 URL。这是页面的 URL,在页面中,您的用户在身份验证成功后将被重定向。

    https://www.example.com
  4. 选择范围。范围 openid 为必填字段。需要电子邮件范围来授予对 emailemail_verified 声明的访问权限。

  5. OIDC IdP 为您提供客户端 ID 和客户端密钥。您在用户池中设置 OIDC IdP 时将使用它们。

示例:使用 Salesforce 作为用户池的 OIDC IdP

当您要在与 OIDC 兼容的 IdP (如 Salesforce) 和您的用户池之间建立信任时,请使用 OIDC 身份提供商。

  1. 在 Salesforce 开发人员网站上创建账户

  2. 通过在上一步中设置的开发人员账户登录。

  3. 查看 Salesforce 页面的顶部。

    • 如果您使用的是 Lightning Experience,请选择“Setup (设置)”齿轮图标,然后选择 Setup Home (设置主页)

    • 如果您使用的是 Salesforce Classic 并且在用户界面标题中看到 Setup (设置),请选择它。

    • 如果您使用的是 Salesforce Classic 但没有在用户界面标题中看到 Setup (设置),请从顶部导航栏中选择您的姓名,然后从下拉列表中选择 Setup (设置)

  4. 在左侧导航栏上,选择 Company Settings (公司设置)

  5. 在导航栏上,选择 Domain (域),键入一个域,然后选择 Create (创建)

  6. 在左侧导航栏上,转至 Platform Tools (平台工具) 并选择 Apps (应用程序)

  7. 选择 App Manager (应用程序管理器)

    1. 选择 new connected app (新连接的应用程序)

    2. 填写必填字段。

      Start URL (启动 URL) 下,键入具有 /oauth2/idpresponse 终端节点的用户池域 URL。

      https://<your-user-pool-domain>/oauth2/idpresponse
    3. 启用 OAuth settings (OAuth 设置) 并将您的回调 URL 键入到 Callback URL (回调 URL)。这是页面的 URL,在页面中,您的用户在成功登录后将被重定向。

      https://www.example.com
  8. 选择范围。范围 openid 为必填字段。需要电子邮件范围来授予对 emailemail_verified 声明的访问权限。

    范围由空格分隔。

  9. 选择 Create

    在 Salesforce 中,客户端 ID 称为 Consumer Key (使用者密钥),客户端密钥为 Consumer Secret (使用者私有密钥)。记下您的客户端 ID 和客户端密钥。您将在下一节中使用它们。

步骤 2:将 OIDC IdP 添加到用户池

在本节中,配置用户池以通过 OIDC IdP 处理基于 OIDC 的身份验证请求。

添加 OIDC IdP (Amazon Cognito 控制台)
  1. 转到 Amazon Cognito 控制台。系统可能会提示您输入 AWS 凭证。

  2. 选择 Manage your User Pools

  3. 从列表中选择现有用户池,或创建用户池

  4. 在左侧导航栏上,选择身份提供商

  5. 选择 OpenID Connect

  6. 提供商名称中键入一个唯一名称。

  7. 客户端 ID 中键入上一节中的 OIDC IdP 的客户端 ID。

  8. 客户端密钥中键入上一节中的客户端密钥。

  9. 在下拉列表中,选择用于将 userinfo 终端节点中的用户的详细信息提取到属性请求方法的 HTTP 方法(GET 或 POST)。

  10. 键入要授权的范围的名称。范围定义了您要通过应用程序访问的用户属性 (如 nameemail)。根据 OAuth 2.0 规范,范围由空格分隔。

    您的应用程序用户需要同意向您的应用程序提供这些属性。

  11. 键入 IdP 的 URL,然后选择运行发现

    例如,Salesforce 使用以下 URL:

    https://login.salesforce.com

    注意

    URL 应该以 https:// 开头,并且不应以下斜杠 / 结尾。

    1. 如果运行发现不成功,则需要提供授权终端节点令牌终端节点用户信息终端节点Jwks uriJSON Web Key的位置)。

  12. 选择创建提供商

  13. 在左侧导航栏上,选择应用程序客户端设置

  14. 选择在上一步中设置的 OIDC 提供商作为启用身份提供商之一。

  15. 键入一个回调 URL,供 Amazon Cognito 授权服务器在用户通过身份验证之后进行调用。这是页面的 URL,在页面中,您的用户在身份验证成功后将被重定向。

    https://www.example.com
  16. 允许的 OAuth 流程下,启用授权代码授予隐式代码授予

    除非您希望明确地排除一个允许的 OAuth 范围,否则请选中所有“允许的 OAuth 范围”的复选框。

  17. 选择 Save changes

  18. 在左侧导航栏的属性映射选项卡上,将 OIDC 声明的映射添加到用户池属性。

    1. 作为默认值,OIDC 声明 sub 将映射到用户池属性用户名。您可以将其他 OIDC 声明映射到用户池属性。键入 OIDC 声明,然后从下拉列表中选择对应的用户池属性。例如,声明 email 通常会映射到用户池属性电子邮件

    2. 在下拉列表中,选择目标用户池属性。

    3. 选择 Save changes

    4. 选择转到摘要页面

添加 OIDC IdP (AWS CLI)
  • 请参阅 CreateIdentityProvider API 方法的参数描述。

    aws cognito-idp create-identity-provider --user-pool-id string --provider-name string --provider-type OIDC --provider-details map --attribute-mapping string --idp-identifiers (list) --cli-input-json string --generate-cli-skeleton string

    使用此提供商详细信息映射:

    { "client_id": "string", "client_secret": "string", "authorize_scopes": "string", "attributes_request_method": "string", "oidc_issuer": "string", "authorize_url": "string", "token_url": "string", "attributes_url": "string", "jwks_uri": "string" }

步骤 3:测试 OIDC IdP 配置

可以通过使用上两节中的元素并使用这些元素测试 OIDC IdP 配置来创建授权 URL。

https://<your_user_pool_domain>/oauth2/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com

您可以在用户池域名控制台页上找到您的域。client_id 位于应用程序客户端设置页上。对于 redirect_uri 参数,使用您的回调 URL。这是页面的 URL,在页面中,您的用户在身份验证成功后将被重定向。