我正在使用AWS Api Gateway。我使用API网关创建了资源和方法。
我创建了Lambda函数,用于生成json格式的签名URL,以通过CloudFront访问s3存储桶。
当我使用GET方法调用lambda函数时。我传递“channekID”作为查询字符串。我想发送X-API-Key自定义标头以进行授权。
我尝试了很多东西,但没有找到任何解决方案。如何在Lambda函数中发送自定义标头?并在访问Lambda中的标头值之后如何使用x-api-key进行授权?
您无法使用Lambda访问标头。但是你可以做的是在Api网关中创建一个映射模板,将标题值放在事件对象中。
标题应该在$input.params(x)
变量中,可以在映射模板中使用。请参阅full documentation,了解如何完全整合它。
更新:在您的映射模板中(在api网关 - >您的端点 - >集成请求下),添加如下内容:
#set($inputRoot = $input.path('$'))
{
"apikey" : "$input.params('X-Api-Key')"
}
现在你可以在event.apikey
下访问lambda函数中的api键(我没有测试过这个,但我们在生产中使用类似的东西)。请注意,您可以对所有标题变量以及正文中的变量执行此操作。
Api Gateway团队检查,Luc的回答是正确的。您的Lambda函数上下文只能访问请求正文,因此客户端发送到Api Gateway的任何标头都必须映射到请求模板中。 Luc给出的例子很好,但也查看了参考文档:
插口