使用Google认证时,AWS Cognito与Google Actions账号关联失败
问题描述
已配置AWS Cognito将Google作为身份提供商,尝试实现Google Actions的账号关联功能:
- AWS Cognito用户池已创建,Google联合身份提供商配置正常,可通过Google账号在用户池创建用户
- 在用户池中创建了App Client,用其Client ID和Secret配置Google Actions的OAuth客户端
- 账号关联流程中出现异常:
- 可正常选择设备
- 跳转至AWS Cognito OAuth托管UI页面
- 选择已登录的Google账号(均为Google OAuth App测试用户)
- 用户成功在Cognito用户池创建
- 跳转回Google Home App时提示:
Could not reach "[test] my-app". Please try again. - Google Cloud日志显示核心错误:
SYNC: Request ID 13069595105448654396 failed with code: INVALID_AUTH_TOKEN
已尝试的操作:
- 创建带认证角色的身份池并关联该用户池,结果无变化
- 分别使用AWS内置Google身份提供商和自定义OIDC提供商配置联合身份,问题依旧
- 查阅Google Actions账号关联相关资料,未找到Cognito搭配Google作为OAuth提供商的案例
排查与解决建议
1. 检查Cognito返回的Token格式兼容性
Google Actions要求OAuth流程返回的ID Token严格符合OpenID Connect标准,重点检查:
- 确认Cognito App Client已启用OpenID Connect功能,在用户池App Client设置中勾选
Enable token endpoint based on auth code grant - 验证ID Token的
aud(受众)字段是否匹配Google Actions配置的Client ID——这是高频错误点,Google要求aud必须指向自身的OAuth客户端ID,而非Cognito的App Client ID - 确认ID Token的签名算法为Google支持的
RS256,Cognito默认使用该算法,但需确认未被修改为HS256
2. 核对OAuth回调地址配置
- 确保Cognito用户池App Client的回调URL已添加Google Actions的固定回调地址:
https://oauth-redirect.googleusercontent.com/r/<你的Google项目ID> - 同时确认Google OAuth控制台中,已将Cognito的OAuth授权端点和Token端点域名添加到授权白名单
3. 验证Token传递与解析逻辑
Google Actions在账号关联后会用获取到的Token调用你的Sync服务,需检查:
- Sync服务是否正确解析Cognito返回的ID Token,而非错误使用Access Token进行身份验证
- 确认Sync服务验证Token时,使用的是Cognito官方公钥(可通过
https://cognito-idp.<区域>.amazonaws.com/<用户池ID>/.well-known/jwks.json获取),确保签名验证通过
4. 关于身份池的必要性
身份池仅用于获取AWS服务临时凭证,若你的Sync服务不需要访问AWS资源,无需配置身份池。当前问题核心是Token验证失败,与身份池无关,可暂时排除其影响。
5. 检查Google Actions OAuth配置细节
- 在Google Actions控制台的账号关联设置中,确认授权类型选择
Authorization Code(Cognito支持该类型) - 确认
Token URL填写Cognito的Token端点:https://<你的用户池域名>/oauth2/token - 确认
Authorization URL填写Cognito的授权端点:https://<你的用户池域名>/oauth2/authorize,并附带必要参数(如response_type=code、scope=openid email profile)
内容的提问来源于stack exchange,提问作者CodeRunner
相关产品推荐
相关产品推荐

