能否将多个外部SAML身份提供商集成到同一AWS Cognito用户池?
关于Cognito用户池与多SAML身份提供商的集成问题
用户背景与需求
我正试图理解Cognito用户池与基于SAML的外部身份提供商之间的关系。
当前情况
我有一个使用Amplify库、以AWS Cognito为后端的ReactJS多租户应用,不同租户的用户处于同一用户池,通过用户组和自定义属性区分。我使用CloudFormation和serverless框架部署堆栈,目前采用自定义登录表单,通过Amplify库实现用户登录。
目标
除了允许客户在平台创建自有账户外,我希望提供通过外部身份提供商的SAML进行认证的选项,让每个客户能使用自身单点登录(SSO)访问Web应用。
前期研究
- 已了解AWS提供的部署支持SAML的用户池的示例;
- 阅读过Azure与Cognito集成的指南;
- 理解SAML认证流程。
核心问题
是否可以将这些外部身份提供商都附加到同一个用户池,还是必须为每个新客户部署新的用户池?
解答
可以将多个SAML身份提供商(IdP)附加到同一个Cognito用户池,不需要为每个客户单独部署新用户池。
关键说明
- Cognito用户池原生支持添加最多100个SAML身份提供商,完全覆盖多租户场景下的需求。
- 你可以沿用现有逻辑,通过用户组、自定义属性(比如租户ID)来区分不同客户的SAML用户,和本地账户的区分规则保持统一。
- 部署层面,不管是CloudFormation还是Serverless Framework,都可以通过
AWS::Cognito::UserPoolIdentityProvider资源来按需添加新的SAML IdP配置,每个IdP可独立设置元数据、属性映射规则。 - 登录流程上,Amplify库支持在自定义登录表单中展示可用的SAML IdP选项,让用户选择对应租户的SSO入口,也可以通过租户标识自动匹配对应的IdP发起认证。
注意事项
- 确保每个SAML IdP的属性映射配置正确,将外部IdP返回的租户相关属性映射到Cognito用户的自定义属性(例如
custom:tenantId),保障后续业务逻辑能正常区分租户。 - 针对多租户场景,建议在Cognito用户池的应用客户端中配置合适的OAuth范围,同时在SAML IdP侧限制用户仅能访问对应租户的资源。
内容的提问来源于stack exchange,提问作者Struan McDonough
相关产品推荐
相关产品推荐

