向用户池添加 OIDC 身份提供商 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

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


                OIDC IdP 的身份验证概述
注意

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

您可以在Amazon Web Services Management Console中、使用 Amazon CLI 或使用用户池 API 方法 CreateIdentityProvider 向用户池添加 OIDC IdP。

先决条件

在开始之前,您需要:

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

  • 具有以下配置的 OIDC IdP:

    • 支持 client_secret_post 客户端身份验证。Amazon Cognito 不在 IdP 的 OIDC 发现端点上检查 token_endpoint_auth_methods_supported 声明。Amazon Cognito 不支持 client_secret_basic 客户端身份验证。有关客户端验证的更多信息,请参阅 OpenID Connect 文档中的客户端身份验证

    • 仅对 OIDC 端点使用 HTTPS,例如 openid_configurationuserInfojwks_uri

    • 仅为 OIDC 端点使用 TCP 端口 80 和 443。

步骤 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.microsoftonline.com/{tenant}/v2.0

    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. 向 Cognito 用户池注册回调 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. 选择创建

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

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

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

添加 OIDC IdP(Amazon Cognito 控制台)

Original console
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. Manage User Pools (管理用户池)。

  3. 从列表中选择现有用户池,或 create a user pool(创建用户池)。

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

  5. 选择 OpenID Connect

  6. Provider name(提供商名称)中输入一个唯一名称。

  7. Client ID(客户端 ID)中输入上一节中的 OIDC IdP 的客户端 ID。

  8. Client secret(客户端密钥)中输入上一节中的客户端密钥。

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

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

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

  11. 输入 IdP 的 URL,然后选择 Run discovery(运行发现)。

    注意

    URL 应该以 https:// 开头,并且不应以下斜杠 / 结尾。只有端口号 443 和 80 可用于此 URL。例如,Salesforce 使用以下 URL:

    https://login.salesforce.com

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

    注意

    如果提供商使用发现进行联合登录,则发现文档必须对以下值使用 HTTPS:authorization_endpointtoken_endpointuserinfo_endpointjwks_uri。否则,登录将失败。

  12. 选择创建提供商

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

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

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

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

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

  17. 选择保存更改

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

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

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

    3. 选择保存更改

    4. 选择转到摘要页面

New console
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 从导航菜单中选择 User Pools(用户池)。

  3. 从列表中选择现有用户池,或 create a user pool(创建用户池)。

  4. 选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。

  5. 选择 OpenID Connect 身份提供商。

  6. Provider name(提供商名称)中输入一个唯一名称。

  7. 将您从提供商那里收到的客户端 ID 输入到 Client ID(客户端 ID)。

  8. 将您从提供商那里收到的客户端密钥输入到 Client secret(客户端密钥)。

  9. 为该提供商输入 Authorized scopes(授权范围)。范围定义了应用程序将向您的提供商请求的用户属性组(例如 nameemail)。根据 OAuth 2.0 规范,范围必须以空格分隔。

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

  10. 请选择一个 Attribute request method(属性请求方法),以便为 Amazon Cognito 提供 HTTP 方法(GET 或 POST),它必须使用该方法从提供商运营的 userInfo 端点中获取用户的详细信息。

  11. 请选择 Setup method(设置方法)并通过 Auto fill through issuer URL(自动填充发布者 URL)或 Manual input(手动输入)检索 OpenID Connect 端点。当您的提供商具有公有 .well-known/openid-configuration 端点且 Amazon Cognito 可以在其中检索 authorizationtokenuserInfojwks_uri 端点的 URL 时,使用 Auto fill through issuer URL(自动填充发布者 URL)。

  12. 请输入发布者 URL 或 IdP 中的 authorizationtokenuserInfojwks_uri 端点 URL。

    注意

    URL 应该以 https:// 开头,并且不应以下斜杠 / 结尾。只有端口号 443 和 80 可用于此 URL。例如,Salesforce 使用以下 URL:

    https://login.salesforce.com

    如果选择自动填充,则发现文档必须对以下值使用 HTTPS:authorization_endpointtoken_endpointuserinfo_endpointjwks_uri。否则,登录将失败。

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

  14. 请将身份提供商的属性映射到您的用户池。有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射

  15. 选择创建

  16. App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的 OIDC 身份提供商添加到 Identity providers(身份提供商)下的应用程序客户端。

  17. 选择保存更改

添加 OIDC IdP (Amazon 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

您可以在用户池域名控制台页上找到您的域。您可以在 General settings (常规设置) 页面上找到 client_id。对于 redirect_uri 参数,使用您的回调 URL。这是页面的 URL,在页面中,您的用户在身份验证成功后将被重定向。