如何配置IAM角色解决Swift app通过AWS Cognito登录的身份池错误?
解决Amplify SignIn时"Invalid identity pool configuration"错误的建议
核心排查方向
你的问题核心是添加CredentialProvider字段后触发错误,说明该字段的配置或关联IAM角色存在问题,以下是针对性的解决步骤:
核对CredentialProvider配置细节
检查amplifyconfiguration.json中CredentialProvider的结构是否完全正确,重点确认:cognitoIdentity下的poolId和region与AWS控制台身份池信息完全匹配(注意大小写、区域缩写)authenticationProvider下的用户池ID、客户端ID、区域与用户池配置一致
参考正确配置示例:
"CredentialProvider": { "plugins": { "awsCognitoAuthPlugin": { "cognitoIdentity": { "poolId": "us-east-1:xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "region": "us-east-1" }, "authenticationProvider": { "cognitoUserPool": { "UserPoolId": "us-east-1_xxxxxxxxx", "ClientId": "xxxxxxxxxxxxxxxxxxxxxxxxxx", "Region": "us-east-1" } } } } }重新验证IAM认证角色的信任关系
即使你之前确认过信任关系,仍需检查认证用户角色的信任策略是否符合要求:
信任策略必须允许身份池服务主体cognito-identity.amazonaws.com通过Web身份凭证扮演该角色,且限制仅当前身份池的认证用户可访问,示例策略:{ "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" } } } ] }检查角色的权限边界
若IAM角色设置了权限边界,需确认边界未限制必要操作:
进入IAM角色详情页,查看“权限边界”部分,确保允许cognito-identity:*、sts:AssumeRoleWithWebIdentity等与身份凭证获取相关的操作。确认身份池认证提供者配置
回到AWS控制台身份池的“认证提供者”标签:- 核对用户池ID、客户端ID与配置文件中的信息完全一致
- 确保“启用访问令牌认证”处于开启状态(针对Cognito用户池作为认证源的场景)
测试直接调用Cognito Identity API
用AWS CLI或Postman直接调用GetId和GetCredentialsForIdentityAPI,传入有效的用户令牌、身份池ID和用户池信息,验证是否能成功获取凭证。若API调用失败,可根据返回的错误信息定位具体问题。清除Amplify本地缓存
本地缓存的旧凭证可能导致冲突,在Swift应用中执行缓存清除后重新测试:Amplify.Auth.clearCache { result in switch result { case .success: print("缓存清除成功") case .failure(let error): print("清除缓存失败: \(error)") } }
内容的提问来源于stack exchange,提问作者Car Lord VR
相关产品推荐
相关产品推荐

