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

如何从AWS Lambda授权器中获取自定义header clientID?

解决AWS API Gateway授权器Lambda无法获取自定义clientID Header的问题

看来你混淆了授权器Lambda和普通集成Lambda的请求结构,还有API Gateway里授权器与集成请求配置的差异,我帮你一步步梳理解决:

1. 修正授权器Lambda的Event读取逻辑

授权器Lambda的输入event和后端集成Lambda的结构完全不同!你直接取event.clientID是错误的——自定义Header并不在event根节点,而是嵌套在event.headers对象里。

另外要注意:API Gateway会把所有HTTP Header的名称自动转换成全小写,不管你在Postman里传的是clientID、ClientID还是CLIENT_ID,到Lambda的event.headers里都会变成clientid。

把你的Lambda代码改成这样:

exports.handler = function(event, context, callback) { 
  // 读取小写的header键
  var clientid = event.headers.clientid; 
  console.log("The client ID is:" + clientid); 

  // 关键提示:授权器Lambda必须返回合法的授权策略,否则会直接报"Unauthorized"
  // 下面是示例策略,你需要替换成自己的API ARN和逻辑
  const authPolicy = {
    "principalId": "authorized-user",
    "policyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "execute-api:Invoke",
          "Resource": "arn:aws:execute-api:你的区域:你的账号ID:你的API ID/你的阶段/请求方法/资源路径"
        }
      ]
    }
  };

  callback(null, authPolicy);
}

2. 检查授权器的类型与配置

如果你的授权器是TOKEN类型,它只会提取你指定的Token Header(比如Authorization),不会自动传递其他自定义Header。要获取clientID,必须把授权器改成REQUEST类型:

  • 进入API Gateway的授权器配置页,确认类型选择Request
  • 在「Request Parameters」区域,添加需要传递的Header:method.request.header.clientID(名称要和你在Method Request里定义的一致)
  • 保存授权器后,重新部署API到你的阶段

3. 确认Method Request的Header配置

你已经在Method Execution里添加了clientID Header,这一步是对的,但要注意:

  • 不需要在Integration Request里配置映射!集成请求的映射是给后端集成Lambda用的,和授权器Lambda完全无关,之前加的映射反而会混淆逻辑
  • 确保Method Request的「HTTP Request Headers」里确实添加了clientID(HTTP Header不区分大小写,API Gateway会自动兼容)

4. 验证Postman请求

在Postman里发送请求时,确认Header的键填写正确(比如clientID),值也无误。发送后去CloudWatch查看授权器Lambda的日志,现在应该能正确打印出clientID,同时因为返回了合法的授权策略,也不会再报"Unauthorized"了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:50