如何使用 Amazon Cognito 用户池将 AD FS 设置为 SAML 身份提供商?

上次更新时间:2019 年 2 月 7 日

我想使用 Amazon Cognito 用户池将 Active Directory 联合身份验证服务 (AD FS) 设为安全断言标记语言 2.0 (SAML 2.0) 身份提供商 (IdP)。该如何进行设置?

简短描述

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

您可以在 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例上设置 AD FS 服务器和域控制器,然后使用 Amazon Cognito 的托管 Web UI 将设置与用户池相集成。

重要提示:对于此解决方案,您需要使用自己的域名。如果您没有域,可以使用 Amazon Route 53 或其他域名系统 (DNS) 服务注册新域。

解决方法

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

有关更多信息,请参阅教程:创建用户池添加应用程序客户端(AWS 管理控制台)

注意:在创建用户池时,系统会默认选择标准属性 email。有关用户池属性的更多信息,请参阅配置用户池属性

设置 EC2 Windows 实例

配置并启动某个 EC2 Windows 实例,然后在其上设置 AD FS 服务器和域控制器。有关更多信息,请参阅如何在 Amazon EC2 Windows 实例上设置 AD FS,以对 Amazon Cognito 用户池使用联合身份验证?

在 Amazon Cognito 中将 AD FS 服务器配置为 SAML IdP

有关更多信息,请参阅为用户池创建和管理 SAML 身份提供程序(AWS 管理控制台),并按照在用户池中配置 SAML 2.0 身份提供程序下的说明执行操作。

在创建 SAML IdP 时,对于元数据文档,可粘贴元数据文档终端节点 URL 或上传 .xml 元数据文件。

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

有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射,并按照指定 SAML 提供程序属性映射下的说明执行操作。

在添加 SAML 属性时,对于 SAML 属性,请输入 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress。对于用户池属性,请从列表中选择 email

在 Amazon Cognito 中更改应用程序客户端设置

  1. Amazon Cognito 控制台中,进入您的用户池的管理页面,在应用程序集成下,选择应用程序客户端设置。然后,执行以下操作:
    启用身份提供商下,选中与您配置的 SAML IdP 对应的复选框。例如,ADFS
    对于回调 URL,请输入您希望用户在登录后被重定向至的 URL。
    对于注销 URL,请输入您希望用户在退出登录后被重定向至的 URL。
    允许的 OAuth 流程下,选中 Authorization code grant (授权代码授予)Implicit Grant (隐式授予) 复选框。
    允许的 OAuth 范围下,选中所有复选框。
  2. 选择保存更改。有关更多信息,请参阅应用程序客户端设置概览

使用 Amazon Cognito 托管 Web UI 测试您的设置

  1. 在 Web 浏览器中输入以下 URL:
    https://domainNamePrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=appClientId&redirect_uri=https://www.example.com
    注意:
    对于 URL,请使用用户池和应用程序客户端中的值。您可在 Amazon Cognito 控制台应用程序集成页面上找到您的用户池的域(包括域名前缀和 AWS 区域)。可在应用程序客户端设置中找到应用程序客户端 ID。将 https://www.example.com 替换为您的 SAML IdP 的回调 URL。
  2. 选择您配置的 SAML IdP 的名称。您将被重定向至 AD FS 身份验证页面。
  3. 使用您的组织账户登录下,输入您的 Active Directory 用户的用户名和密码。
  4. 选择登录。如果登录成功,Amazon Cognito 将返回用户池令牌和成功的 SAML 响应。有关查看 SAML 响应的更多信息,请参阅如何在浏览器中查看 SAML 响应以排查问题
    注意:
    解码后,SAML 响应应包含所需的属性 NameID