You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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和GetCredentialsForIdentity API,传入有效的用户令牌、身份池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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:35:29