如何在HTTP API Gateway自定义Lambda授权器中获取请求体?
HTTP API Gateway自定义Lambda授权器获取请求体的解决方案
HTTP API Gateway的Lambda授权器默认(Payload版本1.0)确实只会传递请求头、路径等元数据,不会包含请求体——你遇到的情况是正常的,Amazon Q的说法混淆了HTTP API和REST API Gateway的差异。要获取请求体,可按以下方法处理:
切换到Payload版本2.0
在HTTP API Gateway的授权器配置页面,将Payload版本设置为2.0。切换后,Lambda授权器收到的事件对象会包含body字段(如果请求有体的话),同时附带isBase64Encoded标识用来判断是否需要解码。示例Python处理代码:
import base64 import json def lambda_handler(event, context): # 解析请求体 raw_body = event.get('body') if not raw_body: # 无请求体的情况处理 return {"isAuthorized": False} # 处理Base64编码的请求体 if event.get('isBase64Encoded'): decoded_body = base64.b64decode(raw_body).decode('utf-8') body_data = json.loads(decoded_body) else: body_data = json.loads(raw_body) # 这里编写你的授权校验逻辑,比如检查body中的特定字段 if body_data.get('valid_token') == 'authorized': return { "isAuthorized": True, "context": {"user_id": body_data.get('user_id')} } else: return {"isAuthorized": False}注意限制
- Payload版本2.0仅适用于HTTP API Gateway,REST API的授权器逻辑不适用此设置。
- 请求体大小不能超过Lambda的事件负载限制(当前为6MB),如果请求体过大,需要考虑先通过集成将请求体存储到S3,再在授权器中读取,但这种方式会增加架构复杂度和延迟。
- 切换到2.0后,事件结构会变化,比如原1.0中的
headers字段会移到requestContext.http.headers下,需要适配原有授权代码。
内容的提问来源于stack exchange,提问作者omalwankar
相关产品推荐
相关产品推荐

