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

API Gateway调用AppSync时如何仅使用Cognito id_token而非IAM签名?

解决方案:让API Gateway仅传递Cognito id_token调用AppSync,不使用IAM签名

核心结论

完全可以实现,只需调整API Gateway的集成配置,禁用IAM签名并确保请求头正确传递,让AppSync优先识别用户的Cognito id_token。

具体操作步骤

  1. 修改API Gateway集成的认证类型

    • 进入AWS控制台的API Gateway服务,找到目标API并定位到/graphql对应的方法
    • 切换到「集成请求」标签页,找到「集成认证类型」设置
    • 将默认的「AWS IAM」改为「无」,同时移除已配置的集成IAM角色(如果有)
    • 此操作会阻止API Gateway自动生成IAM签名及相关请求头
  2. 调整请求头映射,避免冲突

    • 在「集成请求」的「HTTP头」映射区域,保留已有的Authorization = method.request.header.Authorization映射规则
    • 添加两个额外的头映射,清空API Gateway可能自动添加的IAM相关头:
      • X-Amz-Security-Token = ''(设置为空字符串)
      • X-Amz-Date = ''(设置为空字符串)
    • 确认没有其他会覆盖Authorization头的映射规则
  3. 确认AppSync的认证配置

    • 进入AppSync控制台,检查目标API的「认证」设置
    • 确保已启用「Cognito用户池」认证模式,且配置的用户池与当前使用的Cognito User Pool一致
    • 不要开启「强制IAM认证」,保证AppSync可以接受Cognito id_token作为认证凭证
  4. 部署并测试

    • 返回API Gateway,将API部署到对应的阶段
    • 使用之前验证有效的Cognito id_token,调用API Gateway的/graphql端点,验证请求是否正常返回结果

问题原因说明

API Gateway默认调用AWS内部服务(如AppSync)时,会自动触发IAM签名机制,添加Authorization(IAM签名内容)、X-Amz-Date、X-Amz-Security-Token等请求头。AppSync接收到这些头后,会优先尝试IAM认证流程,从而忽略你通过映射传递的用户Cognito id_token——这就是直接调用AppSync正常,但通过API Gateway转发就出现UnauthorizedException的核心原因。

通过禁用集成的IAM认证并清空相关自动添加的头,AppSync就会按照预期处理你传递的Authorization头里的id_token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:25:26