如何在AWS Lambda中访问标头?

问题描述 投票:5回答:2

我正在使用AWS Api Gateway。我使用API​​网关创建了资源和方法。

我创建了Lambda函数,用于生成json格式的签名URL,以通过CloudFront访问s3存储桶。

当我使用GET方法调用lambda函数时。我传递“channekID”作为查询字符串。我想发送X-API-Key自定义标头以进行授权。

我尝试了很多东西,但没有找到任何解决方案。如何在Lambda函数中发送自定义标头?并在访问Lambda中的标头值之后如何使用x-api-key进行授权?

node.js amazon-web-services aws-lambda aws-api-gateway
2个回答
10
投票

您无法使用Lambda访问标头。但是你可以做的是在Api网关中创建一个映射模板,将标题值放在事件对象中。

标题应该在$input.params(x)变量中,可以在映射模板中使用。请参阅full documentation,了解如何完全整合它。

更新:在您的映射模板中(在api网关 - >您的端点 - >集成请求下),添加如下内容:

#set($inputRoot = $input.path('$'))
{
  "apikey" : "$input.params('X-Api-Key')"
}

现在你可以在event.apikey下访问lambda函数中的api键(我没有测试过这个,但我们在生产中使用类似的东西)。请注意,您可以对所有标题变量以及正文中的变量执行此操作。


2
投票

Api Gateway团队检查,Luc的回答是正确的。您的Lambda函数上下文只能访问请求正文,因此客户端发送到Api Gateway的任何标头都必须映射到请求模板中。 Luc给出的例子很好,但也查看了参考文档:

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

插口

© www.soinside.com 2019 - 2024. All rights reserved.