如何将 Okta 配置为 AWS Cognito 身份池的 SAML IdP?

How to I configure Okta as SAML IdP for AWS Cognito Identity Pool?

我想将 Okta 配置为 AWS Cognito 身份池(而非用户池)的 SAML IdP。

创建身份池时,我需要指定与 AWS 账户关联的 SAML IdP。作为定义 IdP 的一部分,我需要提供元数据文档文件:

要从 Okta 获取此元数据文档,我需要在 Okta 中定义一个使用 SAML 集成的应用程序(即 AWS 是资源提供者,Okta 是 IdP):

这需要来自 AWS 的 2 个我不知道如何获取的值:

  1. 单点登录 URL。 Okta UI 提示如下:

    The location where the SAML assertion is sent with a HTTP POST. This is often referred to as the SAML Assertion Consumer Service (ACS) URL for your application.

  2. 受众 URI(SP 实体 ID)。 Okta UI 提示如下:

    The application-defined unique identifier that is the intended audience of the SAML assertion. This is most often the SP Entity ID of your application.

How/where 我是否从 AWS 获取这些值?

如果我正在尝试为 Cognito 身份池创建 IdP,并且我需要创建一个 IdP,该 IdP 需要来自 Okta 的值,而 Okta 需要引用 Cognito 身份池的值,我该如何避免循环引用?

问题 1:单点登录 URL。 Okta UI 提示如下:

使用 HTTP POST 发送 SAML 断言的位置。这通常被称为您的应用程序的 SAML 断言消费者服务 (ACS) URL。

回答:

单点登录 URLhttps://signin.aws.amazon.com/saml

问题 2:受众 URI(SP 实体 ID)。 Okta UI 提示如下:

应用程序定义的唯一标识符,它是 SAML 断言的目标受众。这通常是您的应用程序的 SP 实体 ID。

回答:

受众 URI(SP 实体 ID):urn:amazon:webservices

重要说明

(1) How to build and run Shibboleth SAML IdP and SP using Docker container 在 GitHub 存储库提供 Amazon AWS SAML 服务提供元数据 "shibboleth-idp-dockerized/ext-conf/metadata/sp-aws-amazon-com.xml" 已通过成功的 Amazon AWS SSO 验证。

Amazon AWS SAML 服务提供元数据提供单点登录 URL 和 Okta SAML IdP 所需的受众 URI(SP 实体 ID)。

(2) Adding SAML Identity Providers to a User Pool 指出用户池的受众 URI/SP 实体 ID( 不是 身份池)是 urn:amazon:cognito:sp:your-User-池 ID。

问题 3:如果我正在尝试为 Cognito 身份池创建 IdP,并且我需要创建一个 IdP,该 IdP 需要来自 Okta 的值,而 Okta 需要引用的值到 Cognito 身份池,如何避免循环引用?

回答:
为避免循环引用,Amazon AWS 为不同的 AWS 账户分配相同的单点登录 URL 和 Cognito 身份池的受众 URI(SP 实体 ID),因此,

(1) 您需要先从 Okta Admin GUI 创建 Amazon AWS SAML SP,

(2) 然后您可以下载 Okta 的 SAML IdP 元数据,这是通过 Amazon AWS Cognito Admin GUI 创建 IdP(如 Okta SAML IdP)所必需的。

注意 Amazon AWS使用属性"awsRoles"(由SAML响应携带)来区分不同的AWS账户。