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

Amplify v6如何通过Cognito身份池实现IAM认证的访客访问?

Amplify v6 实现Cognito访客身份访问AppSync API解决方案

针对升级Amplify到v6后,访客登录调用fetchAuthSession返回空会话、GraphQL API报Error: No credentials的问题,以下是修正后的完整实现方案:

1. 完善Amplify v6配置

v6的Auth配置必须明确指定身份池所在区域,否则无法正确获取凭证:

import { Amplify } from 'aws-amplify';

export const appsyncGuestResourcesConfig = {
  Auth: {
    Cognito: {
      identityPoolId: 'your-identity-pool-id',
      region: 'us-east-1', // 替换为你的身份池所在区域
      allowGuestAccess: true // 明确开启访客访问(若身份池已默认开启可省略)
    }
  },
  API: {
    GraphQL: {
      endpoint: 'your-appsync-graphql-endpoint',
      defaultAuthMode: 'iam',
      region: 'us-east-1' // 替换为你的AppSync所在区域(与身份池一致可省略)
    }
  }
};

export const appsyncGuestLibraryOptions = {
  API: {
    GraphQL: {
      headers: async () => ({})
    }
  }
};

Amplify.configure(appsyncGuestResourcesConfig, appsyncGuestLibraryOptions);

2. 正确实现访客登录逻辑

fetchAuthSession默认不会主动触发未认证身份的凭证获取,需添加forceRefresh: true强制拉取访客凭证:

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

export async function signInAsGuest() {
  try {
    const session = await fetchAuthSession({ forceRefresh: true });
    if (!session.credentials) {
      throw new Error('无法获取访客身份凭证');
    }
    return session;
  } catch (error) {
    console.error('访客登录失败:', error);
    throw error; // 抛出错误让调用方处理
  }
}

3. 修正GraphQL调用流程

必须等待访客登录完成后再调用API,否则会因凭证未生成报错:

import { API, graphqlOperation } from '@aws-amplify/api-graphql';
import { signOut } from '@aws-amplify/auth';
import { signInAsGuest } from './auth/guest';
import { createUser } from './graphql/mutations'; // 注意:创建用户应为mutation而非query

async function registerUser() {
  try {
    // 等待访客身份凭证获取完成
    await signInAsGuest();
    // 调用AppSync API
    const response = await API.graphql(graphqlOperation(createUser));
    console.log('用户创建成功:', response);
    // 访客身份登出
    await signOut();
  } catch (error) {
    console.error('注册失败:', error);
  }
}

关键检查项

  • 确认Cognito身份池已启用未认证身份访问(AWS控制台→身份池→编辑身份池→启用未认证身份)。
  • 身份池的未认证角色拥有AppSync API的调用权限(IAM策略需包含appsync:GraphQL操作,资源为你的AppSync ARN)。
  • AppSync API已开启IAM认证模式(控制台→AppSync→设置→认证→启用IAM)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:23:10