如何在 Amazon Cognito 中设置 SAML 联邦,通过 IdP 发起的单点登录、请求签名
在 Amazon Cognito 中使用 IdP 启动的单点登录、请求签名和加密断言设置 SAML 联合
关键要点
SAML 联合:使用 IdP身份提供者启动的单点登录流,简化用户认证流程。保护数据:通过加密 SAML 响应,增强安全性。集成教程:详细步骤说明如何将 Microsoft Entra ID 集成到 Amazon Cognito 用户池。本文将介绍如何在 Amazon Cognito 中设置 SAML 联合,利用 IdP 启动的单点登录SSO、请求签名和加密断言。
在多个服务提供者SP之间,身份提供者IdP启动的单点登录可以提供一致的登录体验,使用户能够从一个集中的入口或仪表板启动认证过程。这使得管理员可以更好地控制认证流程并简化管理。
但是,在支持 IdP 启动的认证时,SP在此情况下为 Amazon Cognito无法验证接收到的 SAML 响应是否是由 SP 请求的,因为不存在从 SP 启动的 SAML 请求。为了允许在用户池中接受未经请求的 SAML 断言,您必须考虑这对您应用程序安全性的影响。尽管用户池无法验证由 IdP 启动的登录会话,Amazon Cognito 仍会验证您的请求参数和 SAML 断言。
最近,Amazon Cognito 增强了对 SAML 20 协议的支持,添加了对 IdP 启动的单点登录、SAML 请求签名和接受加密 SAML 响应的支持。
Amazon Cognito 作为代表应用程序的 SP,在联合后生成可由应用程序用来访问受保护后端的令牌。SAML 提供者作为 IdP,存储用户身份和凭证,负责用户的认证。
本文将描述将 SAML IdP Microsoft Entra ID 与 Amazon Cognito 用户池集成并使用 SAML IdP 启动 SSO 流的步骤。还描述了启用认证请求签名和接受加密 SAML 响应的步骤。
IdP 启动的认证流程使用 SAML 联合
蓝鲸加速器苹果版如图 1 所示,具有联合认证的应用程序的高层次流程图通常涉及以下步骤:
企业用户打开他们的 SSO 门户并登录。这通常会打开一个具有多个应用程序的门户,用户可以访问。当用户从 SSO 门户选择 Amazon Cognito 保护的应用程序时,触发 IdP 启动的 SSO 流。当用户从 SSO 门户启动应用程序时,Entra ID 向 Cognito 端点发送 SAML 断言以联合用户。Amazon Cognito 验证 SAML 断言,并在用户首次进行联合时在 Cognito 中创建用户,如果用户之前已经从此 IdP 登录,则更新用户记录。Cognito 然后生成授权码并将用户重定向到应用程序 URL,附带该授权码,应用程序以此授权码向 Cognito 令牌端点换取令牌。应用程序获得令牌后,按需使用它们进行访问授权。SAML 响应包含包含用户特定数据的声明或断言。SAML 响应通过 HTTPS 传输,以保护数据的机密性,但您也可以启用加密以进一步保护传输的用户信息的机密性。这使得具有解密密钥的受信方可以解密数据,保护数据在到达 SP 后的机密性。
在 Amazon Cognito 和 Entra ID 之间设置 SAML 联合
要设置 SAML 联合并使用 IdP 启动 SSO,您需要完成以下步骤:
创建一个 Amazon Cognito 用户池。在 Cognito 用户池中创建一个应用客户端。在 Entra ID 中将 Cognito 添加为企业应用。在 Cognito 中将 Entra ID 添加为 SAML IdP,并启用 IdP 启动的 SSO。将新创建的 SAML IdP 添加到您的用户池应用客户端。启用 SAML 响应加密。在 Entra ID SAML SSO 中添加 RelayState。前提条件
要实施该解决方案,您必须在 Azure 门户和您的 AWS 账户中具有执行这些任务所需的权限。
第 1 步:创建 Amazon Cognito 用户池
在 Amazon Cognito 中创建一个新的用户池,使用默认设置。请注意用户池 ID,例如 useast1abcd1234。您将在后续步骤中需要此值。
为用户池添加域名
Cognito 用户池的托管 UI 可以用作具有自定义网页界面的 OAuth 20 授权服务器,用于注册和登录。Cognito OAuth 20 端点可以通过需要添加到用户池的域名进行访问。可以使用 Cognito 域或您拥有的域名添加域名。此解决方案使用 Cognito 域,其格式如下:
https//ltyourDomainPrefixgtauthltawsregiongtamazoncognitocom
为用户池添加域名:在 Amazon Cognito 的 AWS 管理控制台中,导航到用户池的 应用集成 选项卡。在右侧窗格上,选择 操作并选择 创建 Cognito 域。
输入可用的域名前缀例如:examplecorpprd以用于 Cognito 域。
第 2 步:在 Cognito 用户池中创建应用客户端
在您的 web 应用中使用 Amazon Cognito 之前,您必须将您的应用注册为 Amazon Cognito 的应用客户端。IdP 启动的 SAML 流无法与其他 SP 启动认证的 SAML IdP 或社交 IdP 启用。IdP 启动的 SAML 引入了其他 SSO 提供者不受影响的额外风险。例如,无法添加状态参数,通常用于防止跨站请求伪造CSRF。因此,您无法将不是 SAML 的 IdP包括用户池本身添加到使用 SAML 提供者的应用客户端中,而该客户端使用 IdP 启动的 SSO。
创建应用客户端:在 Amazon Cognito 控制台中,导航到相同用户池的 应用集成 选项卡,找到 应用客户端。选择 创建应用客户端。选择 应用类型。在此示例中,创建一个公共客户端。输入 应用客户端名称。选择 不生成客户端密钥。保持其余设置为默认值。在 托管 UI 设置 下,添加应用客户端的 允许回调 URLs。这是认证后将被重定向的地址。选择 授权码授权 作为 OAuth 20 授权类型。您可以保持其余配置为默认,选择 创建应用客户端。应用客户端成功创建后,请从用户池的 应用集成 选项卡中获取 应用客户端 ID。
准备 Entra ID 设置的信息
准备 标识符实体 ID 和 回复 URL,这在将 Amazon Cognito 添加为 Entra ID 中的企业应用时是必需的步骤 3。
标识符实体 ID 和 回复 URL 的创建格式如下:
标识符实体 ID 的格式为:urnamazoncognitospltyourUserPoolIDgt例如:urnamazoncognitospuseast1abcd1234
回复 URL 的格式为:https//ltyourDomainPrefixgtauthltawsregiongtamazoncognitocom/saml2/idpresponse例如:https//examplecorpprdauthuseast1amazoncognitocom/saml2/idpresponse
回复 URL 是 Entra ID 在用户认证期间将 SAML 断言发送到 Amazon Cognito 的端点。
有关详细信息,请参阅将 SAML 身份提供者添加到用户池。
第 3 步:将 Amazon Cognito 添加为 Entra ID 中的企业应用
创建用户池和应用客户端并准备好 Entra ID 信息后,您可以在 Entra ID 中将 Amazon Cognito 添加为应用。要完成此步骤,您将添加 Cognito 作为企业应用并设置 SSO。
添加 Cognito 作为企业应用登录 Azure 门户。在搜索框中搜索服务 Microsoft Entra ID。在左侧边栏中选择 企业应用。选择 新应用。在 浏览 Microsoft Entra 画廊 页面上,选择 创建您自己的应用。在 您的应用程序名称是什么? 下,输入应用的名称并选择 集成您在画廊中找不到的其他应用非画廊,如图 4 所示。选择 创建。应用程序将在 Entra ID 中创建需要几秒钟,然后您将被重定向到新添加应用程序的 概述 页面。设置使用 SAML 的 SSO:在 入门 页面中,在 设置单点登录 瓦片中,选择 开始,如图 5 所示。在下一个屏幕上,选择 SAML。在中间窗格的 设置使用 SAML 的单点登录 下,选择编辑图标。在右侧窗格中,在 基本 SAML 配置 下,将默认的 标识符 ID实体 ID 替换为您在步骤 2 中创建的标识符实体 ID。将 回复 URL声明消费服务 URL 替换为您在步骤 2 中创建的回复 URL。现在转到 属性和声明 并记录声明,如图 7 所示。创建 Amazon Cognito 中的属性映射时,您将需要这些。向下滚动到 SAML 证书 部分,选择复制到剪贴板图标以复制 应用程序联邦元数据 URL。请记下此 URL,以便在下一步使用。第 4 步:将 Entra ID 添加为 Amazon Cognito 中的 SAML IdP
在此步骤中,您将 Entra ID 添加为用户池中的 SAML IdP,并下载签名和加密证书。
添加 SAML IdP:在 Amazon Cognito 控制台中,导航到相同用户池的 登录体验 选项卡。找到 联合身份提供者登录 并选择 添加身份提供者。选择一个 SAML IdP。输入 提供程序名称,例如 EntraID。在 IdP 启动的 SAML 登录 下,选择 接受 SP 启动和 IdP 启动的 SAML 断言。在 元数据文档源 下,输入您在步骤 3 中捕获的元数据文档端点 URL。可选在 SAML 签名和加密 下,选择 要求来自此提供者的加密 SAML 断言。仅在您可以在 Entra ID 应用中开启令牌加密时启用 来自此提供者的加密 SAML 断言。
在 映射您 SAML 提供者与用户池之间的属性 下,映射 SAML 提供者属性与用户池中的用户资料。将用户池所需的属性包含在属性映射中。例如,当选择 用户池属性 时,电子邮件字段的 SAML 属性名称应按 SAML 断言所示。我们的情况是http//schemasxmlsoaporg/ws/2005/05/identity/claims/emailaddress。
选择 添加身份提供者。创建 IdP 后,您可以导航到用户池中最近添加的 EntraID IdP,以下载 SAML 签名和加密证书。这些证书必须导入到 Entra ID 企业应用中。
下载证书要下载 SAML 签名证书,选择 查看签名证书 并选择 下载为 crt。要下载 SAML 加密证书,选择 查看加密证书 并选择 下载为 crt。第 5 步:将新创建的 SAML IdP 添加到您的用户池应用客户端
在您的 web 应用中使用 Amazon Cognito 之前,您必须将步骤 4 中创建的 SAML IdP 添加到应用客户端。
添加 SAML IdP:在 Amazon Cognito 控制台中,导航到相同用户池的 应用集成 选项卡,找到 应用客户端。选择您在步骤 2 中创建的应用客户端。找到 托管 UI 部分并选择 编辑。在 身份提供者 下,选择在步骤 4 中创建的身份提供者并选择 保存更改。此时,Amazon Cognito OAuth 20 服务器已启动并运行,网络界面也可访问,准备好使用。您可以通过 Cognito 控制台从应用客户端访问 Cognito 托管的 UI 进行进一步测试。
第 6 步:在 Entra ID 中启用 SAML 响应加密
为了增加用户数据的安全性和隐私,启用 SAML 响应的加密。Amazon Cognito 和您的 IdP 可以在用户登录和注销时在 SAML 响应中建立机密性。Cognito 为您在用户池中配置的每个外部 SAML 提供者分配一个公钥私钥 RSA 密钥对和证书。您将使用在步骤 4 下载的 SAML 加密证书。
启用 SAML 响应加密:在 Entra ID 中导航到您的企业应用,在左侧菜单中,在 安全 下选择 令牌加密。导入在步骤 4 中下载的 SAML 加密证书。在导入证书后,它默认为非活动状态。要激活它,右键单击证书并选择 激活令牌加密证书。这样可以启用加密 SAML 响应。![图 12:在 Entra ID 中激活令牌加密证书](https//d