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

React中AWS Amplify Auth的fetchAuthSession返回undefined凭证问题

解决Amplify 6.x无法获取AWS凭证的问题

核心原因

你当前拿到的tokens仅用于Cognito用户身份认证,而访问DynamoDB等AWS资源需要临时IAM凭证,这类凭证需要通过Amazon Cognito身份池来生成和分发——你目前缺少身份池的配置,所以credentials返回undefined。

具体解决方案

1. 创建并配置Cognito身份池

  • 登录AWS控制台,进入Cognito身份池页面,创建新身份池或配置已有身份池
  • 将你的Cognito用户池关联到身份池:在身份池的「认证提供者」中添加Cognito用户池,填入用户池ID和应用客户端ID
  • 为身份池配置认证角色(可选配置未认证角色):确保认证角色的IAM权限策略包含你需要访问的AWS资源权限(比如DynamoDB的读写权限)
  • 确认角色的信任策略允许Cognito身份池的用户假定该角色(信任策略中需包含身份池的ARN)

2. 更新Amplify配置

在React应用中,确保Amplify配置包含身份池信息:

import { Amplify } from 'aws-amplify';

Amplify.configure({
  Auth: {
    region: import.meta.env.VITE_AWS_REGION,
    userPoolId: import.meta.env.VITE_AWS_USER_POOL_ID,
    userPoolWebClientId: import.meta.env.VITE_AWS_USER_POOL_CLIENT_ID,
    // 新增身份池配置
    identityPoolId: import.meta.env.VITE_AWS_IDENTITY_POOL_ID,
    identityPoolRegion: import.meta.env.VITE_AWS_REGION
  }
});

如果使用amplifyconfiguration.json配置文件,确保文件中包含IdentityPoolId相关字段。

3. 正确获取凭证

配置完成后,调用fetchAuthSession时添加forceRefresh: true参数,强制触发凭证获取:

import { fetchAuthSession } from 'aws-amplify/auth';

const getCredentials = async () => {
  const session = await fetchAuthSession({ forceRefresh: true });
  // 此时session.credentials应包含临时IAM凭证(accessKeyId、secretAccessKey、sessionToken)
  return session.credentials;
};

4. 更便捷的方式:使用Amplify凭证提供者

无需手动管理凭证生命周期,直接使用Amplify提供的AuthCredentialsProvider对接AWS SDK v3,它会自动处理凭证的获取与刷新:

import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { AuthCredentialsProvider } from "@aws-amplify/auth-credentials-provider";

const ddb = new DynamoDBClient({
  region: import.meta.env.VITE_AWS_REGION,
  credentials: new AuthCredentialsProvider(),
});

验证要点

  • 确认身份池的认证角色权限足够访问目标AWS资源
  • 确认Cognito用户池的应用客户端已添加到身份池的认证提供者列表
  • 测试时确保用户已通过withAuthenticator完成登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:15:30