我正在使用AWS API Gateway和它的HTTP代理,
我需要通过AWS API Gateway将Authorization标头传递给我的端点
我试过的事情:
像这样设置方法请求,
这不起作用,我的应用程序没有收到授权标题,
我也尝试过使用映射模板
{
"method": "$context.httpMethod",
"body" : $input.json('$'),
"headers": {
#foreach($param in $input.params().header.keySet())
"$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end
#end
},
"queryParams": {
#foreach($param in $input.params().querystring.keySet())
"$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end
#end
},
"pathParams": {
#foreach($param in $input.params().path.keySet())
"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
#end
}
}
Run Code Online (Sandbox Code Playgroud)
这也行不通.
任何人都可以给我一些关于如何实现这一点的暗示吗?
我们正在努力做什么
我们正在尝试使用 API Gateway 和 Lambda 建立一个非常简单的地理定位服务。
与https://ipstack.com/非常相似,但我们不想使用外部服务,因为我们认为在某些司法管辖区将非匿名 IP 地址发送到我们无法控制的服务可能会出现问题(在征得用户同意之前)。
想要一个简单的 api https://location.my-site.com返回国家/地区(用于 GDPR、cookie 等目的)。
现在看来,API Gateway 后面有一个轻量级的 Cloudfront,它会生成标头“Cloudfront-Viewer-Country”,这将非常简单并实现我们所需要的。即 lambda 接收 Cloudfront-Viewer-Country 并将其发回。
我们尝试过什么
我见过这样的解决方案:使用 AWS Lambda 和 MaxMind 构建地理定位 API,但我很难理解为什么部署 RDS 和维护 MaxMind 数据库对我们来说有意义,如果它已经可以从 Cloudfront-Viewer-Country 获得的话。
我看到过这个问题:Accessing cloudfront-viewer-country header in AWS API Gateway using HTTP Proxy? ,并尝试实现Michael-sqlbot的答案。但我似乎无法访问标题。
我也尝试了这篇文章中的建议,但我似乎也无法访问 Cloudfront-Viewer-Country 的价值。
我们正在做什么(与“我们已经尝试过的事情”结合起来)
要访问并检查标头是否可用,我使用以下 python lambda 函数
import json
def lambda_handler(event, context):
response = {
'status': '200',
'statusDescription': 'Found',
'headers': {
'location' : [ …Run Code Online (Sandbox Code Playgroud)