AWS Cognito对接ADFS OpenID Connect IDP时email属性缺失的解决
AWS Cognito与ADFS OIDC对接:解决email属性缺失问题
一、关键配置:属性映射
问题核心是Cognito未正确从ADFS的OIDC断言中提取并映射email属性,按以下步骤修正:
- 登录AWS控制台,进入目标Cognito用户池,选择身份提供商 -> 已配置的ADFS OIDC提供商
- 找到属性映射模块:
- 在「用户池属性」列选中标准属性
email - 在「IDP属性」列填写ADFS返回JWT中对应的email字段名——ADFS常用的字段名是
email或http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress,需以实际返回的JWT内容为准 - 若应用要求email为必填项,勾选「将此属性标记为必填」
- 在「用户池属性」列选中标准属性
- 保存配置后重新测试登录流程
二、是否需要自定义属性映射?
仅当ADFS返回的email字段无法匹配Cognito标准email属性时才需要:
- 先在Cognito用户池的属性 -> 自定义属性中添加自定义属性(例如
custom:adfs_email) - 在身份提供商的属性映射中,将ADFS的非标准email字段映射到该自定义属性
- 若应用依赖标准
email字段,可通过Cognito的预注册触发器或自定义消息触发器将自定义属性值同步到标准email属性中
三、调试手段
- 解码ADFS返回的JWT:
- 用浏览器开发者工具捕获登录流程中授权码交换后的
id_token,使用本地JWT解码工具查看内容,确认ADFS是否返回了email字段及字段名称
- 用浏览器开发者工具捕获登录流程中授权码交换后的
- 检查Cognito用户属性:
- 在Cognito用户池的用户列表中找到测试用户,查看其属性是否包含
email;也可通过AWS CLI命令:
查询完整用户属性aws cognito-idp admin-get-user --user-pool-id <你的用户池ID> --username <用户唯一ID>
- 在Cognito用户池的用户列表中找到测试用户,查看其属性是否包含
- 启用Cognito日志排查:
- 进入Cognito用户池的监控 -> 日志,开启CloudWatch日志并设置日志级别为
INFO或DEBUG - 登录后在CloudWatch日志中搜索
AttributeMapping相关条目,确认Cognito是否正确处理了ADFS返回的属性
- 进入Cognito用户池的监控 -> 日志,开启CloudWatch日志并设置日志级别为
注意:如果ADFS本身未返回email属性,需先在ADFS端配置,确保OIDC断言中包含
内容的提问来源于stack exchange,提问作者Daniel Pomrehn
相关产品推荐
相关产品推荐

