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

如何通过Amplify客户端向AppSync GraphQL发送OIDC idToken进行认证

Amplify客户端调用AppSync OIDC认证的正确Token传递方式

你遇到的"No current user"错误,通常是因为Token传递的细节不符合Amplify客户端要求,或是认证上下文未正确关联。以下是两种正确的Token传递方式及排查要点:

一、单次调用时直接传递参数

你的代码核心逻辑没问题,但需注意几个细节:

  • authMode必须严格为"OPENID_CONNECT"(全大写)
  • authToken需传入有效的OIDC ID Token,确保Token未过期、签名及Claims(如iss、aud)与AppSync配置的OIDC提供者匹配
  • 检查代码语法完整性,你提供的示例末尾缺少闭合括号,会导致执行异常

修正后的完整代码:

const todoData = await API.graphql({
  query: createRoom,
  variables: { advertiser_name: 'test2' },
  authMode: 'OPENID_CONNECT',
  authToken: '你的有效OIDC ID Token'
});

二、全局配置认证上下文(推荐)

如果需要多次调用API,建议全局配置OIDC认证,避免重复传递参数:

1. 初始化Amplify时配置OIDC提供者

import Amplify from 'aws-amplify';
import awsconfig from './aws-exports';

Amplify.configure({
  ...awsconfig,
  Auth: {
    oauth: {
      domain: '你的OIDC身份提供者域名',
      scope: ['openid', 'email', 'profile'],
      redirectSignIn: '你的前端回调地址',
      redirectSignOut: '你的前端退出回调地址',
      responseType: 'id_token'
    }
  }
});

2. 手动注入已获取的Token

如果是自行从OIDC提供者获取Token,可通过以下方式注入到Amplify的认证上下文,后续API调用无需再指定认证参数:

import { Auth } from 'aws-amplify';

// 注入Token,expires_at为Token的过期时间(毫秒级时间戳)
Auth.federatedSignIn({
  token: '你的有效OIDC ID Token',
  expires_at: Date.now() + 3600 * 1000 // 示例为1小时后过期,需根据实际Token的exp字段调整
});

// 后续调用API无需再传authMode和authToken
const todoData = await API.graphql({
  query: createRoom,
  variables: { advertiser_name: 'test2' }
});

常见排查要点

  • 验证Token有效性:用JWT解码工具检查Token的exp(过期时间)、iss(签发者)、aud(受众)是否与AppSync的OIDC配置一致
  • 确认AppSync配置:检查AppSync控制台的认证设置中,OIDC提供者的URL、客户端ID等参数是否正确
  • 检查CORS配置:确保AppSync的CORS规则允许前端域名访问,避免请求中Token被拦截
  • 核对Amplify版本:不同版本的Amplify客户端API可能存在参数差异,建议使用最新稳定版

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:20:19