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

Swift中从AuthCognitoTokensProvider获取Cognito令牌失败排查

解决Amplify获取Cognito令牌失败的问题

问题分析

错误信息明确提示InvalidIdentityPoolConfigurationException,核心原因是Cognito身份池的IAM角色配置有误,导致无法正确获取身份凭证进而获取令牌。

解决步骤

1. 检查Cognito身份池的IAM角色关联

  • 登录AWS控制台,进入Cognito服务,找到你的身份池
  • 点击编辑身份池,查看“认证角色”和“未认证角色”是否已正确选择并存在
  • 确保两个角色不是空白状态,若缺失需重新创建或关联已有角色

2. 验证IAM角色的信任策略

  • 进入IAM控制台,找到身份池对应的认证角色(Authenticated Role)
  • 查看角色的信任关系,确认策略包含以下内容:
    {
      "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"
            }
          }
        }
      ]
    }
    
  • 若策略不符,直接编辑更新为上述格式,替换你的身份池ID为实际值

3. 确认Amplify配置文件正确性

  • 检查项目中的amplifyconfiguration.json,确保Auth节点下的identityPoolId、userPoolId、userPoolClientId与AWS控制台中的信息完全一致
  • 避免出现拼写错误或新旧ID混用的情况

4. 优化令牌获取代码

原代码的错误处理和类型转换可以更严谨,替换为以下代码:

Amplify.Auth.fetchAuthSession { result in
    switch result {
    case .success(let session):
        print("已登录状态:\(session.isSignedIn)")
        guard let cognitoSession = session as? AWSAuthCognitoSession else {
            print("无法转换为Cognito会话")
            return
        }
        // 安全获取令牌
        Task {
            do {
                let tokens = try await cognitoSession.cognitoTokens.get()
                print("ID Token: \(tokens.idToken)")
                print("Access Token: \(tokens.accessToken)")
            } catch {
                print("获取令牌失败:\(error.localizedDescription)")
            }
        }
    case .failure(let error):
        print("获取会话失败:\(error.localizedDescription)")
    }
}

内容的提问来源于stack exchange,提问作者KwameB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:00:34