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

AWS API Gateway执行请求转换后仍无法传递Endpoint请求头问题求助

解决API Gateway无法传递Authorization请求头到Lambda的问题

我帮你梳理下可能遗漏的配置步骤,毕竟这个问题我之前也踩过几次坑:

首先先明确你的问题:网关日志里能看到Authorization头,但Lambda就是收不到,用了标准转换脚本也没用。先看你提供的相关信息:

相关日志与配置

API日志片段:

Endpoint请求头: { X-Amz-Date=20220419T143450Z, x-amzn-apigateway-api-id=?????????, Accept=application/x-www-form-urlencoded, User-Agent=AmazonAPIGateway_hhompg4, Host=lambda.us-east-1.amazonaws.com, X-Amz-Content-Sha256=??????????????????????????????????????????????????, X-Amzn-Trace-Id=Root=1-????????-???????????????????, x-amzn-lambda-integration-tag=abcd-4e32-1234-???????????????, Authorization=*********************************************************************************************************************************************************************************************************************************************************************************************************************************************70cc, X-Amz-Source-Arn=arn:aws:execute-api:us-east-1:-----------------:asfd/test/POST/, X-Amz-Security-Token=---------------------------------------// [TRUNCATED]

集成请求转换脚本:

{ 
  "method": "$context.httpMethod", 
  "body" : $input.json('$'), 
  "headers": { 
    #foreach($param in $input.params().header.keySet()) 
    "$param": "$util.escapeJavaScript($input.params().header.get($param))" 
    #if($foreach.hasNext),#end 
    #end 
  } 
}

Lambda函数接收到的event键:

2022-04-19T14:29:34.457Z INFO Object.keys(event) [ 'resource', 'path', 'httpMethod', 'headers', 'multiValueHeaders', 'queryStringParameters', 'multiValueQueryStringParameters', 'pathParameters', 'stageVariables', 'requestContext', 'body', 'isBase64Encoded' ]
Object.keys(event.headers) [ 'accept', 'accept-encoding', 'accept-language', 'cache-control', 'content-type', 'Host', 'origin', 'referer', 'sec-ch-ua', 'sec-ch-ua-mobile', 'sec-ch-ua-platform', 'sec-fetch-dest', 'sec-fetch-mode', 'sec-fetch-site', 'sec-fetch-user', 'upgrade-insecure-requests', 'User-Agent', 'X-Amzn-Trace-Id', 'X-Forwarded-For', 'X-Forwarded-Port', 'X-Forwarded-Proto' ]

核心问题排查步骤

1. 先确认集成类型:代理还是非代理?

  • 如果是Lambda代理集成(控制台里勾选了Use Lambda Proxy integration):API Gateway默认会把大部分请求头传给Lambda,但前提是你没有在集成请求里自定义转换模板覆盖默认行为。你的转换脚本其实是在重写整个event结构,这时候$input.params().header只能拿到方法请求中允许的头,而不是所有传入的头。
  • 如果是非代理集成:必须手动在集成请求里配置头映射,否则API Gateway不会把Authorization头传递给Lambda。

2. 必须在「方法请求」中允许Authorization头

这是最容易漏掉的一步:

  • 进入API Gateway控制台,找到你的POST方法,切换到方法请求标签
  • 找到「请求头」区域,点击「添加头」,输入Authorization,保存
  • 这一步是告诉API Gateway:这个请求头是合法的,需要被传递到后续的集成环节

3. 在「集成请求」中配置头映射(非代理集成必做)

如果是非代理集成,光允许头还不够,还要映射到集成请求里:

  • 切换到集成请求标签,找到「HTTP请求头」区域
  • 点击「添加头」,输入Authorization,然后在「映射值」里选择method.request.header.Authorization
  • 保存配置,然后重新部署API到对应的stage——不部署的话所有配置都是白搭!

4. 检查转换脚本的逻辑

你的脚本是遍历$input.params().header,但这个对象只包含「方法请求」中定义的头。如果没在方法请求里添加Authorization,这个遍历自然拿不到它。所以先完成步骤2,再测试转换脚本是否能拿到这个头。

5. 排除外部过滤因素

  • 检查是否有WAF规则拦截了Authorization头:去WAF控制台查看对应的Web ACL,确认没有阻止该头的规则
  • 不要用API Gateway控制台的测试功能:控制台测试不会自动传递真实的Authorization头,建议用curl或Postman发起真实请求测试,比如:
    curl -X POST https://your-api-id.execute-api.us-east-1.amazonaws.com/test/ \
      -H "Authorization: Bearer your-token" \
      -H "Content-Type: application/json" \
      -d '{"test": "data"}'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:38:13