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

上次更新时间:2020 年 9 月 3 日

我想在 Amazon Cognito 用户池中将 Okta 设置为安全断言标记语言 2.0 (SAML 2.0) 身份提供商 (IdP)。该如何进行设置?

简短描述

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

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

解决方法

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

  1. 创建用户池
    注意:在创建过程中,默认选择标准属性 email(电子邮件)。有关更多信息,请参阅配置用户池属性
  2. 在用户池中创建应用程序客户端。有关更多信息,请参阅添加应用程序以启用托管 Web UI
    注意:在添加应用程序客户端时,取消选中 Generate client secret(生成客户端密钥)复选框。在某些授权流程 (如授权代码授予流程和令牌刷新流程) 中,授权服务器使用应用程序客户端密钥授权客户端代表用户提出请求。对于此设置中使用的隐式授予流程,则不需要应用程序客户端密钥。
  3. 为用户池添加域名

注册 Okta 开发者账户

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

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

在 Okta 中创建 SAML 应用程序

  1. 打开 Okta 开发者控制台。有关控制台的更多信息,请参阅 Okta 开发者博客上的 The Okta Developer Console: All new, All you
  2. 在左上角,在 Developer Console(开发者控制台)上悬停,然后选择 Classic UI(经典 UI)。这将打开管理控制台。有关更多信息,请参阅 Okta 开发者网站的 Okta Organizations 页面上的管理员控制台部分。
    重要提示:您必须在管理控制台(经典 UI)中创建 SAML 应用程序。
  3. Shortcuts(快捷方式)下,选择 Add Applications(添加应用程序)。
    或者,选择 Applications(应用程序),然后选择 Add Application(添加应用程序)。
  4. Add Application(添加应用程序)页面上,选择 Create New App(创建新应用程序)。
  5. 创建新的应用程序集成对话框中,确认平台设置为 Web
  6. 对于登录方法,选择 SAML 2.0
  7. 选择 Create(创建)。

有关更多信息,请参阅 Okta 开发人员网站上构建单点登录 (SSO) 集成指南中的 准备集成

为 Okta 应用程序配置 SAML 集成

  1. 创建 SAML 集成页面的常规设置下,输入您的应用程序名称。
  2. (可选)上传徽标,然后为您的应用选择可见性设置。
  3. 选择下一步
  4. 常规下,对于单一登录 URL,输入 https://yourDomainPrefix.auth.region.amazoncognito.com/saml2/idpresponse
    注意:请将 yourDomainPrefixregion 替换为您的用户池的值。您可以打开 Amazon Cognito 控制台,然后在您的用户池的 Domain name(域名)页面上找到这些值。
  5. 对于 Audience URI (SP Entity ID)(受众 URI(SP 实体 ID)),输入 urn:amazon:cognito:sp:yourUserPoolId
    注意:请将 yourUserPoolId 替换为您的 Amazon Cognito 用户池 ID。您可以打开 Amazon Cognito 控制台,在您的用户池的 General settings(常规设置)页面上找到此值。
  6. Attribute Statements (Optional)(属性语句(可选))下,添加具有以下信息的语句:
    对于名称,输入 SAML 属性名称 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
    对于,输入 user.email
  7. 对于页面上的所有其他设置,保留为默认值,或根据您的偏好进行设置。
  8. 选择下一步
  9. 为“Okta 支持”选择反馈响应。
  10. 选择 Finish(完成)。

有关更多信息,请参阅 Okta 开发人员网站上构建单点登录 (SSO) 集成指南中的 创建集成

向 Okta 应用程序分配用户

  1. 在 Okta 应用程序的 Assignments(分配)选项卡上,对于 Assign(分配),选择 Assign to People(分配给人员)。
  2. 选择要分配的用户旁的 Assign(分配)。
    注意:如果是新账户,唯一可用的选项是选择自己(管理员)为用户。
  3. (可选)对于用户名,输入用户名,或将其保留为用户的电子邮件地址(如果您想要)。
  4. 选择保存并返回。您的用户即已分配。
  5. 选择 Done(完成)。

有关更多信息,请参阅 Okta 开发人员网站上构建单点登录 (SSO) 集成指南中的 分配用户

获取 Okta 应用程序的 IdP 元数据

在 Okta 应用程序的登录选项卡中,找到身份提供商元数据超链接。右键单击超链接,然后复制 URL。

有关更多信息,请参阅 Okta 开发人员网站上构建单点登录 (SSO) 集成指南中的 指定集成设置

在用户池中将 Okta 配置为 SAML IdP

  1. Amazon Cognito 控制台中,选择管理用户池,然后选择您的用户池。
  2. 在左侧导航窗格的联合身份下,选择身份提供商
  3. 选择 SAML
  4. 元数据文档下,粘贴您复制的身份提供商元数据 URL。
  5. 对于提供商名称,输入 Okta。有关更多信息,请参阅选择 SAML 身份提供商名称
  6. (可选)输入任何 SAML 标识符 [标识符(可选)],并在您的用户从用户池注销时启用从 IdP (Okta) 注销(启用 IdP 注销流)。
  7. 选择 Create provider(创建提供商)。

有关更多信息,请参阅为用户池创建和管理 SAML 身份提供商(AWS 管理控制台)

将电子邮件地址从 IdP 属性映射到用户池属性

  1. Amazon Cognito 控制台中,选择管理用户池,然后选择您的用户池。
  2. 在左侧导航窗格的联合下,选择属性映射
  3. 在“属性映射”页面上,选择 SAML 选项卡。
  4. 选择添加 SAML 属性
  5. 对于 SAML 属性,输入 SAML 属性名称 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  6. 对于 User pool attribute(用户池属性),从列表中选择 Email(电子邮件)。

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

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

  1. Amazon Cognito 控制台中,选择管理用户池,然后选择您的用户池。
  2. 在左侧导航窗格中,在应用程序集成中,选择应用程序客户端设置
  3. 在应用程序客户端页面上,执行以下操作:
    启用身份提供商下,选中 OktaCognito 用户池复选框。
    对于回调 URL,输入您希望用户在登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://www.example.com/
    对于注销 URL,输入您希望用户在注销后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://www.example.com/
    允许的 OAuth 流程下,请务必至少选中隐式授予复选框。
    允许的 OAuth 范围下,请务必至少选中电子邮件openid 复选框。
  4. 选择 Save changes(保存更改)。

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

构建终端节点 URL

使用用户池中的值,构造此登录终端节点 URL:

https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl

确保执行以下操作:

  • 请将 yourDomainPrefixregion 替换为您的用户池的值。您可以打开 Amazon Cognito 控制台,然后在您的用户池的 Domain name(域名)页面上找到这些值。
  • yourClientId 替换为您的应用程序客户端的 ID,并将 redirectUrl 替换为您的应用程序客户端的回调 URL。打开 Amazon Cognito 控制台,在您的用户池的 App client settings(应用程序客户端设置)页面可以找到这些值。

有关更多信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?以及登录终端节点

测试终端节点 URL

  1. 在您的 Web 浏览器中输入构建的登录终端节点 URL。
  2. 在您的登录终端节点网页上,选择 Okta
    注意:如果您被重定向至您的应用程序客户端的回调 URL,则表示您已经在浏览器中登录您的 Okta 账户。用户池令牌显示在 Web 浏览器地址栏的 URL 中。
  3. 在 Okta 的登录页面上,输入您向应用程序分配的用户的用户名和密码。
  4. 选择登录

登录后,您将被重定向至应用程序客户端的回调 URL。用户池令牌显示在 Web 浏览器地址栏的 URL 中。

(可选)跳过 Amazon Cognito 托管 UI

如果您希望您的用户在登录应用程序时跳过 Amazon Cognito 托管 Web UI,则将此 UI 用作终端节点 URL:

https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/authorize?response_type=token&identity_provider=samlProviderName&client_id=yourClientId&redirect_uri=redirectUrl&scope=allowedOauthScopes

确保执行以下操作:

  • 请将 yourDomainPrefixregion 替换为您的用户池的值。您可以打开 Amazon Cognito 控制台,然后在您的用户池的 Domain name(域名)页面上找到这些值。
  • samlProviderName 替换为您的用户池中的 SAML 提供商名称 (Okta)。
  • (可选)如果您之前在标识符(可选)字段中为您的 SAML IdP 添加了一个标识符,您可以将 identity_provider=samlProviderName 替换为 idp_identifier=idpIdentifier,从而将 idpIdentifier 替换为您的自定义标识符字符串。
  • yourClientId 替换为您的应用程序客户端的 ID,并将 redirectUrl 替换为您的应用程序客户端的回调 URL。打开 Amazon Cognito 控制台,在您的用户池的 App client settings(应用程序客户端设置)页面可以找到这些值。
  • allowedOauthScopes 替换为您希望您的 Amazon Cognito 应用程序客户端请求的特定范围。例如,scope=email+openid

有关更多信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?以及授权终端节点