如何在 Amazon Cognito 用户池中将 Okta 设置为 OpenID Connect 身份提供商?

上次更新日期:2021 年 9 月 21 日

我想将 Okta 用作 Amazon Cognito 用户池中的 OpenID Connect (OIDC) 身份提供商 (IdP)。该如何进行设置?

简短描述

Amazon Cognito 用户池允许通过第三方(联合身份验证)登录,包括 Okta 等 IdP。有关更多信息,请参阅通过第三方添加用户池登录向用户池添加 OIDC 身份提供商

将用户池与 Okta 集成,可让 Okta 应用程序中的用户获取来自 Amazon Cognito 的用户池令牌。有关更多信息,请参阅将令牌与用户池结合使用

解决方法

创建具有应用程序客户端和域名的 Amazon Cognito 用户池

  1. 创建用户池
    注意:在创建过程中,默认选择标准属性 email(电子邮件)。有关更多信息,请参阅配置用户池属性
  2. 在用户池中创建应用程序客户端。有关更多信息,请参阅添加应用程序以启用托管 Web UI
  3. 为用户池添加域名

注册 Okta 开发者账户

注意:如果您已有 Okta 开发者账户,请直接登录。

  1. Okta 开发者注册网页上,输入您的个人信息,然后选择 SIGN UP(注册)。Okta 开发团队会将验证电子邮件发送到您提供的电子邮件地址。
  2. 在验证电子邮件中,找到您账户的登录信息。选择 ACTIVATE(激活),登录并完成账户的创建。

创建 Okta 应用程序

  1. 打开 Okta 开发者控制台。有关控制台的更多信息,请参阅 Okta 开发人员博客上的 Okta 重新设计的关联控制台和控制面板 — 现已全面推出!
  2. 在导航窗格中,展开 Applications(应用程序),然后选择 Applications(应用程序)。这将会打开应用程序控制台。有关更多信息,请参阅 Okta 开发者网站的 Okta Organizations 页面上的管理员控制台部分。
  3. 选择 Create App Integration(创建应用程序集成)。
  4. Create a new app integration(创建新应用程序集成)页面上,依次选择 OpenID ConnectWeb Application(Web 应用程序)和 Next(下一步)。

为您的 Okta 应用程序配置设置

  1. New Web App Integration(新 Web 应用程序集成)页面的 General Settings(常规设置)下,输入应用程序名称。例如,TestApp
  2. Grant type(授权类型)下,确认已选择 Authorization Code(授权代码)复选框。您的用户池使用此流与 Okta OIDC 通信以进行联合用户登录。
  3. 对于登录重定向 UR,请输入 https://myUserPoolDomain/oauth2/idpresponse。Okta 通过该地址发送身份验证响应和 ID 令牌。
    注意: myUserPoolDomain 替换为您的 Amazon Cognito 用户池域。在 Amazon Cognito 控制台中的域名页面上,您可以找到您的用户池的域。
  4. 配置 OPENID CONNECT 下,对于登录重定向 URI,输入 https://myUserPoolDomain/oauth2/idpresponse。Okta 通过该地址发送身份验证响应和 ID 令牌。
    注意: myUserPoolDomain 替换为您的 Amazon Cognito 用户池域。在 Amazon Cognito 控制台中的域名页面上,您可以找到您的用户池的域。
  5. Controlled access(受控访问)中,选择首选访问设置,然后再选择 Save(保存)。
  6. Client Credentials(客户端凭证)中,复制 Client ID(客户端 ID)和 Client secret(客户端密钥)。在 Amazon Cognito 用户池中配置 Okta 时,将需要这些凭证。
  7. 选择 Sign On(登录)。
  8. Sign On(登录)页面的 OpenID Connect ID Token(OpenID Connect ID 令牌)中,记下 Issuer(发布者)URL。在用户池中配置 Okta 时,您将需要此 URL。

在用户池中添加 OIDC IdP

  1. Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
  2. 在左侧导航窗格的联合身份下,选择身份提供商
  3. 选择 OpenID Connect
  4. 执行以下操作:
    对于提供商名称,输入 IdP 的名称。此名称将显示在 Amazon Cognito 托管 Web UI 中。
    注意:您无法在创建提供商后更改此字段。如果您计划将此字段包括在您的应用程序中或使用 Amazon Cognito 托管的 Web UI,请使用一个让您的应用程序用户看得舒服的名称。
    对于客户端 ID,粘贴先前从 Okta 记下的客户端 ID
    对于客户端密钥(可选),粘贴先前从 Okta 记下的客户端密钥
    对于属性请求方法,将设置保留为 GET
    对于 Authorize scope(授权范围),输入要授权的 OIDC 范围值,以空格分隔。有关更多信息,请参阅 OpenID 网站上的 OpenID Connect 基本客户端实施指南 1.0 中的范围值部分。
    重要提示:OIDC IdP 需要 openid 范围,并且您可以根据用户池配置添加其他范围。例如,如果在创建用户池时将电子邮件保留为必填属性,请输入电子邮件 openid 以包括两个范围。您可以在此设置的后面步骤中将电子邮件属性映射到您的用户池。
    对于发布者,粘贴先前从 Okta 复制的发布者 URL。
    对于标识符(可选),您可以选择输入自定义字符串,以便稍后替代 OIDC IdP 的名称在终端节点 URL 中使用。
  5. 选择运行发现以获取 Okta 的 OIDC 配置终端节点。
  6. 选择 Create provider(创建提供商)。

有关更多信息,请参阅将 OIDC IdP 添加到您的用户池

更改您的用户池的应用程序客户端设置

  1. Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
  2. 在左侧导航窗格中,在应用程序集成中,选择应用程序客户端设置
  3. 在应用程序客户端页面上,执行以下操作:
    Enabled Identity Providers(已启用身份提供商)下,为您先前创建的 IdP 选中 OIDC 提供商复选框。
    (可选)选中 Cognito User Pool(Cognito 用户池)复选框。
    对于 Callback URL(s)(回调 URL),输入您希望用户在登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/
    对于注销 URL,输入您希望用户在退出登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/
    Allowed OAuth Flows(已允许的 OAuth 流)下,选择与您想要应用程序在通过 Cognito 身份验证之后接收的授权类型对应的流。
    注意:您启用的允许的 OAuth 流程可用于确定您可以将哪些值(代码令牌)用于终端节点 URL 中的 response_type 参数
    允许的 OAuth 范围下,至少选中电子邮件openid 复选框。
  4. 选择 Save changes(保存更改)。

有关更多信息,请参阅应用程序客户端设置术语

将电子邮件属性映射到用户池属性

如果您先前授权了电子邮件 OIDC 范围值,请将其映射到用户池属性。

  1. Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
  2. 在左侧导航窗格的 Federation(联合)下,选择 Attribute mapping(属性映射)。
  3. 在“属性映射”页面上,选择 OIDC 选项卡。
  4. 如果您的用户池中有多个 OIDC 提供商,请从下拉列表中选择新提供商。
  5. 确认 OIDC 属性 sub 已映射到用户池属性 Username
  6. 选择添加 OIDC 属性,然后执行以下操作:
    对于 OIDC 属性,请输入电子邮件
    对于 User pool attribute(用户池属性),选择 Email(电子邮件)。

有关更多信息,请参阅为用户池指定身份提供商属性映射

登录以测试您的设置

使用 Amazon Cognito 托管的 Web UI 通过 Okta 进行身份验证。成功登录后,您将被重定向至应用程序客户端的回调 URL。授权代码或用户池令牌显示在 Web 浏览器地址栏的 URL 中。

有关更多信息,请参阅使用 Amazon Cognito 托管 UI 进行注册和登录