React Native+AWS Amplify谷歌登录后触发InvalidIdentityPoolConfigurationException
解决Cognito Identity Pool配置错误导致的联合登录失败问题
错误信息
LOG Sign in failure [InvalidIdentityPoolConfigurationException: Invalid identity pool configuration. Check assigned IAM roles for this pool.]
问题原因分析
通过谷歌联合登录后,Cognito User Pool完成用户身份验证后,需要将该身份映射到Identity Pool以获取临时IAM凭证——这就是Identity Pool参与流程的核心原因。出现该错误的本质是:Identity Pool无法为已认证的用户正确分配或关联IAM角色,常见诱因包括角色配置缺失、信任策略错误、身份池与User Pool/谷歌提供商关联失效,或是Safari的第三方Cookie限制导致认证状态丢失。
解决方案
1. 检查Identity Pool与User Pool的关联配置
- 进入AWS控制台的Cognito Identity Pool页面,确认已添加你的Cognito User Pool作为身份提供商,且填写的用户池ID和客户端ID与控制台信息完全匹配
- 确保身份池的「启用联合身份验证」选项已开启,若通过User Pool中转谷歌登录,需确认Identity Pool已将该User Pool设为信任的身份源
2. 验证Identity Pool的IAM角色配置
- 检查身份池对应的已认证角色和未认证角色是否存在,且角色的信任策略配置正确:
已认证角色的信任策略需允许Cognito Identity Pool服务主体,示例配置如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "你的身份池ID" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] } - 若角色不存在,需重新创建并关联到Identity Pool;若策略有误,直接编辑角色的信任策略修正
3. 适配Safari的第三方Cookie限制
Safari默认阻止第三方Cookie,会导致Amplify无法保存或读取认证会话,进而影响Identity Pool的身份解析:
- 在
amplifyconfiguration.json的Auth模块OAuth配置中,修改cookieStorage参数:"oauth": { "domain": "你的Cognito Hosted UI域名", "scope": ["email", "openid", "profile"], "redirectSignIn": "你的Expo重定向URL", "redirectSignOut": "你的Expo重定向URL", "responseType": "code", "cookieStorage": { "domain": ".你的域名.com", "path": "/", "expires": 365, "sameSite": "none", "secure": true } } - 测试阶段可临时开启Safari的「允许所有Cookie」选项(设置> Safari> 隐私与安全性> 关闭「阻止所有Cookie」)
4. 确认Amplify配置的完整性
- 检查
amplifyconfiguration.json中是否正确填写了identityPoolId、userPoolId和userPoolWebClientId,确保三者与AWS控制台的配置完全匹配 - 初始化Amplify时,确认Auth模块的配置已正确加载,无遗漏参数
5. 二次校验User Pool的谷歌提供商配置
- 登录谷歌开发者控制台,确认OAuth 2.0客户端ID的授权重定向URI包含Cognito Hosted UI的回调URL(格式:
https://你的Cognito域名/oauth2/idpresponse)和Expo的重定向URL - 确认Cognito User Pool中谷歌身份提供商的客户端ID和客户端密钥与谷歌控制台的信息一致,且已启用OAuth 2.0相关API
内容的提问来源于stack exchange,提问作者user42195
相关产品推荐
相关产品推荐

