接入Google作为OIDC身份提供商到AWS Cognito后登录遇`attributes required: [email]`错误
问题分析与解决方案
是的,这个attributes required: [email]错误的核心原因就是AWS Cognito在创建用户时,未能从Google OIDC提供商处获取到email属性,或者无法将其正确映射到用户池的必填email字段。以下是具体的排查和解决步骤:
1. 确认Google OAuth作用域与权限配置
- 确保Google Cloud Console中,你的OAuth客户端已正确配置
email相关权限:- 在OAuth consent screen的
Scopes for Google APIs中,添加email(或完整路径https://www.googleapis.com/auth/userinfo.email),并确保该权限处于启用状态。 - 检查Google端的作用域是否与Cognito配置匹配:Cognito请求的
openid email phone profile作用域,需要Google端完全支持并返回对应属性。
- 在OAuth consent screen的
2. 验证Google ID Token是否包含email声明
Cognito默认优先从ID Token而非UserInfo接口获取用户属性,即便你调用userinfo能拿到email,如果ID Token里没有该字段,Cognito依然会报错:
- 解码登录流程中Google返回的ID Token(可使用本地JWT解码工具,比如终端执行
jwt decode <token>命令),检查payload中是否存在email字段。 - 如果ID Token不含
email,需确认Google是否因为作用域未正确传递而未返回该声明,重新检查Cognito身份提供商的作用域配置,确保email被包含在请求的scope中。
3. 检查Cognito属性映射与用户池配置
- 确认Cognito身份提供商的属性映射是直接关联ID Token的
email声明到用户池的email属性,避免使用自定义表达式或错误的字段映射。 - 检查用户池的
email属性设置:如果该属性被设为必填,必须确保Cognito能稳定获取到该值;若暂时无法定位问题,可临时将其设为非必填,登录后查看用户属性是否已填充,以此验证是否真的未获取到email。
4. 确认Cognito的作用域是否正确传递给Google
- 抓包查看Cognito向Google发起的授权请求,检查
scope参数是否包含email。如果未包含,需重新配置Cognito身份提供商的作用域,确保openid email phone profile被完整传递。
内容的提问来源于stack exchange,提问作者Marek Takac
相关产品推荐
相关产品推荐

