如何在 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 用户池
- 创建用户池。
注意:在创建过程中,默认选择标准属性 email(电子邮件)。有关更多信息,请参阅配置用户池属性。 - 在用户池中创建应用程序客户端。有关更多信息,请参阅添加应用程序以启用托管 Web UI。
- 为用户池添加域名。
注册 Okta 开发者账户
注意:如果您已有 Okta 开发者账户,请直接登录。
- 在 Okta 开发者注册网页上,输入您的个人信息,然后选择 SIGN UP(注册)。Okta 开发团队会将验证电子邮件发送到您提供的电子邮件地址。
- 在验证电子邮件中,找到您账户的登录信息。选择 ACTIVATE(激活),登录并完成账户的创建。
创建 Okta 应用程序
- 打开 Okta 开发者控制台。有关控制台的更多信息,请参阅 Okta 开发人员博客上的 Okta 重新设计的关联控制台和控制面板 — 现已全面推出!。
- 在导航窗格中,展开 Applications(应用程序),然后选择 Applications(应用程序)。这将会打开应用程序控制台。有关更多信息,请参阅 Okta 开发者网站的 Okta Organizations 页面上的管理员控制台部分。
- 选择 Create App Integration(创建应用程序集成)。
- 在 Create a new app integration(创建新应用程序集成)页面上,依次选择 OpenID Connect、Web Application(Web 应用程序)和 Next(下一步)。
为您的 Okta 应用程序配置设置
- 在 New Web App Integration(新 Web 应用程序集成)页面的 General Settings(常规设置)下,输入应用程序名称。例如,TestApp。
- 在 Grant type(授权类型)下,确认已选择 Authorization Code(授权代码)复选框。您的用户池使用此流与 Okta OIDC 通信以进行联合用户登录。
- 对于登录重定向 UR,请输入 https://myUserPoolDomain/oauth2/idpresponse。Okta 通过该地址发送身份验证响应和 ID 令牌。
注意:将 myUserPoolDomain 替换为您的 Amazon Cognito 用户池域。在 Amazon Cognito 控制台中的域名页面上,您可以找到您的用户池的域。 - 在配置 OPENID CONNECT 下,对于登录重定向 URI,输入 https://myUserPoolDomain/oauth2/idpresponse。Okta 通过该地址发送身份验证响应和 ID 令牌。
注意:将 myUserPoolDomain 替换为您的 Amazon Cognito 用户池域。在 Amazon Cognito 控制台中的域名页面上,您可以找到您的用户池的域。 - 在 Controlled access(受控访问)中,选择首选访问设置,然后再选择 Save(保存)。
- 在 Client Credentials(客户端凭证)中,复制 Client ID(客户端 ID)和 Client secret(客户端密钥)。在 Amazon Cognito 用户池中配置 Okta 时,将需要这些凭证。
- 选择 Sign On(登录)。
- 在 Sign On(登录)页面的 OpenID Connect ID Token(OpenID Connect ID 令牌)中,记下 Issuer(发布者)URL。在用户池中配置 Okta 时,您将需要此 URL。
在用户池中添加 OIDC IdP
- 在 Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
- 在左侧导航窗格的联合身份下,选择身份提供商。
- 选择 OpenID Connect。
- 执行以下操作:
对于提供商名称,输入 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 中使用。 - 选择运行发现以获取 Okta 的 OIDC 配置终端节点。
- 选择 Create provider(创建提供商)。
有关更多信息,请参阅将 OIDC IdP 添加到您的用户池。
更改您的用户池的应用程序客户端设置
- 在 Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
- 在左侧导航窗格中,在应用程序集成中,选择应用程序客户端设置。
- 在应用程序客户端页面上,执行以下操作:
在 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 复选框。 - 选择 Save changes(保存更改)。
有关更多信息,请参阅应用程序客户端设置术语。
将电子邮件属性映射到用户池属性
如果您先前授权了电子邮件 OIDC 范围值,请将其映射到用户池属性。
- 在 Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
- 在左侧导航窗格的 Federation(联合)下,选择 Attribute mapping(属性映射)。
- 在“属性映射”页面上,选择 OIDC 选项卡。
- 如果您的用户池中有多个 OIDC 提供商,请从下拉列表中选择新提供商。
- 确认 OIDC 属性 sub 已映射到用户池属性 Username。
- 选择添加 OIDC 属性,然后执行以下操作:
对于 OIDC 属性,请输入电子邮件。
对于 User pool attribute(用户池属性),选择 Email(电子邮件)。
有关更多信息,请参阅为用户池指定身份提供商属性映射。
登录以测试您的设置
使用 Amazon Cognito 托管的 Web UI 通过 Okta 进行身份验证。成功登录后,您将被重定向至应用程序客户端的回调 URL。授权代码或用户池令牌显示在 Web 浏览器地址栏的 URL 中。
有关更多信息,请参阅使用 Amazon Cognito 托管 UI 进行注册和登录。