使用IAM Identity Center作为IdP时,Cognito JWT缺失用户角色及cognito:groups声明
根据Stack Overflow上关于Amazon Cognito用户角色的回答,Cognito返回的JWT应该包含用户角色,但我检查JWT时既没找到角色,也没有预期的cognito:groups声明。
我了解到需要配置以下这些作用域才能实现该功能:
请问是否还需要启用其他特定选项?
说明:我们已将Cognito配置为使用IAM Identity Center SAML应用作为外部身份提供商。
针对你用IAM Identity Center(原SSO)作为Cognito外部SAML IDP的场景,要让JWT包含角色/cognito:groups声明,还需要完成以下关键配置:
配置IAM Identity Center的SAML属性映射
IAM Identity Center不会自动传递用户组信息到Cognito,需在对应SAML应用的属性映射中,将IAM Identity Center的用户组字段(通常为Groups)映射到SAML断言的groups属性,或https://aws.amazon.com/SAML/Attributes/Role属性。操作路径:IAM Identity Center控制台→目标Cognito SAML应用→编辑属性映射→添加对应规则。配置Cognito用户池的SAML属性映射
需将SAML断言中的组属性映射到Cognito用户池的cognito:groups或自定义属性:
- 进入Cognito用户池控制台→身份提供商→你的SAML IDP→属性映射
- 将SAML断言中的
groups字段(或你在IAM Identity Center配置的映射字段)映射到cognito:groups,确保用户池允许该属性被写入
- 调整Cognito应用客户端的令牌配置
除已配置的作用域外,需确保应用客户端的令牌设置包含目标属性:
- 进入Cognito用户池→应用客户端→目标客户端→编辑应用客户端
- 在ID令牌设置和访问令牌设置中,勾选
cognito:groups(或自定义组属性),确保其被包含在生成的JWT内
验证SAML断言内容
用SAML调试工具(如SAML Tracer)捕获登录过程中的SAML断言,确认IAM Identity Center确实传递了用户组信息。若断言中无组数据,需优先排查IAM Identity Center的配置。检查Cognito Lambda触发器(若有)
如果你配置了预认证/后认证Lambda触发器,确认这些函数未修改或删除用户的组属性,避免Lambda过滤导致JWT中缺失对应声明。
内容的提问来源于stack exchange,提问作者tftd

