在用户池中使用OIDC身份提供商 - Amazon Cognito

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

在用户池中使用OIDC身份提供商

用户可以使用 OpenID Connect (OIDC) 身份提供商 (IdPs) 提供的现有账户登录您的应用程序。通过提供OIDC商,独立单点登录系统的用户可以提供现有凭据,而您的应用程序则以用户池共享格式接收OIDC令牌。用户池是一个 OIDC IdP,它也可以充当多个外部应用程序OIDC IdPs 和您的应用程序之间的中间依赖方。

使用 OIDC IdP 登录的用户无需提供新的凭据或信息即可访问您的用户池应用程序。您的应用程序可以静默地将他们重定向到其 IdP 进行登录,在后台使用用户池作为工具,用于标准化应用程序的令牌格式。要了解有关 IdP 重定向的更多信息,请参阅。对端点授权

与其他第三方身份提供商一样,您必须向OIDC提供商注册您的应用程序,并获取有关要连接到用户池的 IdP 应用程序的信息。用户池 OIDC IdP 需要客户端 ID、客户机密钥、您要请求的范围以及有关提供商服务端点的信息。您的用户池可以从发现OIDC端点发现提供商端点,也可以手动输入。您还必须检查提供商 ID 令牌,并在 IdP 和用户池中的属性之间创建属性映射。

使用 I OIDC dP 进行身份验证概述
注意

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

您可以通过 AWS Management Console、或使用用户池方法将 OIDC IdP 添加到您的用户池API中。 AWS CLICreateIdentityProvider

先决条件

在开始之前,您需要:

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

  • 具有以下OIDC配置的 IdP:

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

    • 仅HTTPS用于OIDC端点openid_configuration,例如userInfo、和jwks_uri

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

    • 仅使用 HMAC-SHA ECDSA、或RSA算法对 ID 令牌进行签名。

    • 在密钥的 jwks_uri 处发布密钥 ID kid 声明,并在其令牌中包含 kid 声明。

    • 提供带有有效根 CA 信任链的未过期公钥。

步骤 1:向 I OIDC dP 注册

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

向 OIDC IdP 注册
  1. 使用 I OIDC dP 创建开发者账户。

    链接到 OIDC IdPs
    OIDCIdP 如何安装 OIDC发现 URL
    Salesforce

    安装 Salesforce 身份提供商

    https://login.salesforce.com

    Ping Identity

    安装 Ping Identity 身份提供商

    https://Your Ping domain address:9031/idp/userinfo.openid

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

    Okta

    安装 Okta 身份提供商

    https://Your Okta subdomain.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 URL 使用/oauth2/idpresponse终端节点注册您的用户池域。这样可以确保 OIDC IdP 稍后在对用户进行身份验证时接受来自 Amazon Cognito 的请求。

    https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse
  3. 在您的 Amazon Cognito 用户池中注册您的回传URL。这是 Amazon Cognito 在成功进行身份验证后重定向您的用户的页面。URL

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

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

示例:将 Salesforce 用作OIDC用户池中的 IdP

当你想在OIDC兼容的 OIDC IdP(例如 Salesforce)和你的用户池之间建立信任时,你可以使用 IdP。

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

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

  3. 请在 Salesforce 页面上,执行以下操作之一:

    • 如果您使用的是 Lightning Experience,请选择设置齿轮图标,然后选择 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. 完成必填句段。

      在 “开始” 下URL,URL在使用您的 Salesforce IdP 登录的用户池域的/authorize终端节点处输入 a。当您的用户访问您的关联应用程序时,Salesforce 会引导他们访问该应用程序URL以完成登录。然后,Salesforce 会将用户重定向到您与应用程序客户端关联的回调URL。

      https://mydomain.us-east-1.amazoncognito.com/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com&identity_provider=CorpSalesforce
    3. 在 Callback URL 中启用OAuth设置并输入用户池域的/oauth2/idpresponse终端节点URL。这是 Salesforce 发布授权码URL的地方,Amazon Cognito 用该代码兑换令牌。OAuth

      https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse
  8. 选择 scopes(范围)。您必须包含范围 openid。要授予对 emailemail_verified 声明的访问权限,请添加 email(电子邮件)范围。通过空格分隔范围。

  9. 选择 Create(创建)。

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

第 2 步:将 I OIDC dP 添加到您的用户池

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

添加 OIDC IdP(亚马逊 Cognito 控制台)

添加 I OIDC dP
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入您的 AWS 凭据。

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

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

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

  5. 选择一个 OpenID Connect IdP。

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

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

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

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

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

  10. 选择一种属性请求方法,为 Amazon Cognito 提供从您的提供商运营的userInfo终端节点获取用户详细信息时必须使用的HTTP方法(GET或之一POST)。

  11. 选择一种设置方法通过自动填写签发者URL或手动输入来检索 OpenID Connect 端点。URL如果您的提供商拥有公共.well-known/openid-configuration终端节点,Amazon Cognito 可以在其中检索、、和jwks_uri终端节点 authorization tokenuserInfo,则使用自动填充发卡机构。URLs

  12. 输入您的 IdP 的颁发者URL或authorizationtokenuserInfo、、和jwks_uri终端节点URLs。

    注意

    URL应该以斜线开头https://,不应以斜杠/结尾。只能使用端口号 443 和 80。URL例如,Salesforce 使用以下URL方法:

    https://login.salesforce.com

    如果选择 auto fill,则发现文档必须使用HTTPS以下值:authorization_endpointtoken_endpointuserinfo_endpoint、和jwks_uri。否则,登录将失败。

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

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

  15. 选择 Create(创建)。

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

  17. 选择 Save changes(保存更改)

添加 I OIDC dP ()AWS CLI

  • 请参阅该CreateIdentityProviderAPI方法的参数描述。

    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 配置

您可以使用前两节中的元素来创建授权URL,并使用它们来测试 OIDC IdP 配置。

https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com

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