如何将Amazon Cognito配置为独立SAML身份提供商(IdP)无需第三方集成
将Amazon Cognito配置为独立SAML身份提供商(IdP)的完整指南
虽然AWS官方文档更多聚焦于Cognito与第三方IdP的集成,但确实可以将Cognito用户池直接作为SAML IdP使用,以下是针对你需求的分步指导及资源参考:
1. 配置Cognito用户池并启用SAML IdP功能
- 创建或选择已有的Cognito用户池,提前规划好需要在SAML断言中传递的用户属性(如
email、username、自定义属性custom:role等),确保这些属性在用户池的Attributes设置中已启用。 - 进入用户池的App integration标签页,选择App clients and analytics,点击Create app client:
- 在App client type中选择SAML 2.0
- 填写App client名称,完成基础配置后进入SAML设置环节。
2. 配置Cognito中的SAML核心参数
在创建SAML类型App client的过程中,需配置以下关键SAML设置:
- Entity ID:你的应用的唯一SAML实体标识符(例如
https://your-app-domain.com/saml/entity) - ACS URL:应用的断言消费者服务地址,即Cognito发送SAML断言的目标URL(例如
https://your-app-domain.com/saml/acs) - Signing options:根据应用需求选择是否对SAML断言签名,若启用,后续可从Cognito的SAML元数据中获取签名证书
- 其他可选配置:断言有效期、是否加密断言等,按需设置
配置完成后,保存App client,在其详情页中找到SAML metadata选项,下载Cognito作为IdP的元数据XML文件——该文件包含了IdP的SSO端点、实体ID、签名证书等关键信息,需提供给你的应用用于SAML集成。
3. 配置Cognito到应用的SAML属性映射
- 回到用户池的App integration > Attribute mapping(或直接在SAML App client的设置中找到Attribute mapping)
- 点击Add SAML attribute,将Cognito用户池属性映射到SAML断言中的标准或自定义属性:
- 示例映射:
- Cognito属性
email→ SAML属性http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress - Cognito属性
username→ SAML属性http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier - Cognito自定义属性
custom:user_role→ SAML属性http://schemas.microsoft.com/ws/2008/06/identity/claims/role
- Cognito属性
- 示例映射:
- 确保映射的用户池属性为可读写状态,且用户数据中已填充对应值,否则断言中不会包含该属性。
4. 测试并验证SAML流程
方法1:通过Cognito Hosted UI测试
- 构造SSO请求URL:
https://<你的用户池域名>/login?response_type=code&client_id=<你的SAML App Client ID>&redirect_uri=<你的ACS URL>&scope=openid - 在浏览器中访问该URL,使用Cognito用户池中的有效用户账号登录,登录成功后会自动跳转到你的应用ACS URL,并携带SAML断言。
- 使用浏览器插件(如SAML Tracer)捕获HTTP请求,验证断言中的属性是否与映射配置一致,同时检查签名有效性。
方法2:使用SAML测试工具
- 将下载的Cognito SAML元数据导入SAML测试工具(如SAML Test Connector),配置工具的ACS URL和实体ID与Cognito中设置的一致。
- 发起SAML认证请求,验证是否能成功获取Cognito的断言,且属性解析正确。
关键验证点
- 断言签名是否可用Cognito元数据中的证书验证通过
- 断言包含的属性是否与映射规则匹配
- 应用能否正确解析断言并完成用户身份认证
相关资源与技巧
- 官方文档参考:AWS Cognito的SAML 2.0 app clients章节(虽未单独强调Cognito作为IdP,但核心配置逻辑已涵盖)
- 社区示例:GitHub上有不少开源项目展示了Cognito作为SAML IdP的集成实现,可参考Node.js/Python等语言的SAML服务提供者代码,学习断言解析与认证逻辑
- 实用技巧:
- 确保用户池域名已正确配置(自定义域名或AWS默认域名),否则SSO请求会失败
- 开启Cognito CloudWatch日志(用户池Monitoring > Logs),便于排查认证流程中的错误
- 若应用要求加密断言,需在Cognito中上传应用的公钥,同时在应用中配置解密逻辑
内容的提问来源于stack exchange,提问作者knightsky
相关产品推荐
相关产品推荐

