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

使用Cognito ID Token调用S3Client时遇身份池授权异常问题

解决Cognito身份池与用户池关联后的NotAuthorizedException问题

遇到NotAuthorizedException: Token is not from a supported provider of this identity pool.错误,即便已确认用户池ID和App Client ID正确,也可以从以下方向排查解决:

  • 核对Logins键的格式
    确保logins对象的键严格遵循cognito-idp.<区域>.amazonaws.com/<用户池ID>格式,代码里的eu-central-1_xxxxxxxxx必须和身份池绑定的用户池ID完全一致,包括字符顺序、下划线位置,不能有拼写错误。

  • 检查身份池的身份提供者配置
    登录AWS控制台,进入目标Cognito身份池的「身份提供者」页面:

    • 确认已添加对应的Cognito用户池,且用户池ID、App Client ID填写正确
    • 确认「认证的角色」已配置,并且该角色的IAM权限包含S3访问权限(比如允许s3:GetObject操作访问你的MY_BUCKET)
  • 验证ID Token的核心字段
    用jwt.io解码你的ID Token,检查两个关键字段:

    • aud:必须等于身份池绑定的App Client ID,否则说明Token来自不匹配的客户端
    • iss:必须是https://cognito-idp.eu-central-1.amazonaws.com/eu-central-1_xxxxxxxxx,确保发行者和身份池配置的用户池一致
  • 清理SDK依赖冲突
    你的package.json里同时存在aws-sdk(v2)和@aws-sdk/*(v3),虽然多数情况不冲突,但可能引发潜在问题。建议移除aws-sdk依赖,只保留v3的SDK包,因为代码里已经在使用v3的客户端。

  • 代码小调整:显式获取凭证
    试试显式获取凭证后再初始化S3Client,避免异步加载问题:

    const session = await Auth.currentSession();
    const idToken = session.getIdToken().getJwtToken();
    
    if (idToken) {
      const credentialsProvider = fromCognitoIdentityPool({
        client: new CognitoIdentityClient({ region: "eu-central-1" }),
        identityPoolId: "eu-central-1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        logins: {
          'cognito-idp.eu-central-1.amazonaws.com/eu-central-1_xxxxxxxxx': idToken,
        },
      });
      // 显式获取凭证
      const credentials = await credentialsProvider();
      const s3Client = new S3Client({ credentials, region: "eu-central-1" });
    
      try {
        const response = await s3Client.send(
          new GetObjectCommand({
            Bucket: "MY_BUCKET",
            Key: "MY_KEY",
          })
        );
        console.log(response);
      } catch (error) {
        console.log(error);
      }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:45:36