如何从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
相关产品推荐
相关产品推荐

