Lambda代理集成下,AWS Lambda Authorizer自定义数据传递及requestContext问题
针对你的场景(REST API Gateway + Lambda代理集成 + 自定义Lambda Authorizer),无法在后端Lambda的event.requestContext中找到authorizer对象,可按以下步骤排查解决:
1. 修正上下文数据的获取路径
你之前的资料可能有误:在Lambda代理集成模式下,自定义Authorizer返回的context中的键值对不会嵌套在authorizer.context下,而是直接挂载到event.requestContext.authorizer对象中。
比如你的Authorizer返回:
{ "principalId": "ExecuteAPISid", "policyDocument": {...}, "context": { "var1": "hello_world", "var2": "hello_world2" } }
后端Lambda中正确的获取方式是:
# Python示例 var1 = event['requestContext']['authorizer']['var1'] var2 = event['requestContext']['authorizer']['var2']
// Node.js示例 const var1 = event.requestContext.authorizer.var1; const var2 = event.requestContext.authorizer.var2;
2. 确认Authorizer已正确关联到API方法
- 进入API Gateway控制台,找到目标REST API,进入对应的资源和方法(如
GET /your-resource) - 在方法配置页面的Authorizer模块,选择你创建的自定义Lambda Authorizer,点击保存
3. 重新部署API到对应阶段
所有API Gateway配置修改(包括Authorizer关联)必须重新部署才会生效:
- 在API Gateway左侧菜单选择Deploy API
- 选择目标部署阶段,点击Deploy
4. 验证Authorizer返回的Policy资源范围
确保policyDocument中的Resource值正确匹配当前API方法的ARN,否则授权会失败,上下文数据不会被传递:
- 若要允许所有方法,可使用通配符
*(如你当前配置),但需确保Authorizer的执行逻辑正确 - 若指定具体资源,格式应为:
arn:aws:execute-api:${region}:${account-id}:${api-id}/${stage}/${method}/${resource-path}
5. 查看日志排查问题
检查自定义Authorizer的日志
进入Authorizer Lambda函数的CloudWatch日志组,确认函数确实返回了包含context的完整响应,且无报错。
检查API Gateway日志
- 在API Gateway控制台的Stages页面,进入目标阶段的Logs/Tracing设置,开启Enable CloudWatch Logs,并设置日志级别为
INFO - 调用API后,查看对应CloudWatch日志组,检查是否有
Authorize成功的记录,以及是否携带了上下文数据
检查后端Lambda日志
查看后端Lambda的CloudWatch日志,打印完整的event对象,确认requestContext结构中是否存在authorizer字段。
6. 确认IAM权限配置
- 确保自定义Authorizer Lambda的执行角色包含
lambda:InvokeFunction权限,允许API Gateway服务主体(apigateway.amazonaws.com)调用它 - 确保后端Lambda的执行角色允许API Gateway调用它
内容的提问来源于stack exchange,提问作者Frankster
相关产品推荐
相关产品推荐

