我已经阅读了很多类似this one的文章,并且看起来当前在AWS API Gateway中,您无法在查询字符串中发送API密钥。
我们也有少数传统客户端需要在查询字符串中传递api-key。
所以我想到了两个选择
1>将lambda函数创建为Integration Type
,并在函数处理程序内的密钥中验证API。但是我无法弄清楚如何针对aws中的密钥对其进行验证。像
public async Task<JObject> FunctionHandler(JObject request, ILambdaContext context)
{
// i know how to get apikey from queryStringParameters here
// but how do i validate it against api keys in aws
}
2>创建新的自定义授权者,但又不确定我该怎么做。
哪个将是首选选项。 我正在使用.NET Core 。是否有任何可用的nuget软件包?
请注意,即使出于安全原因不建议使用查询字符串支持,但也无法辩论
答案 0 :(得分:0)
您可以在查询参数使用标头中传递安全密钥并通过密钥
curl -X PUT \
https://XXXX.XXXXX-api.ca-central-1.amazonaws.com/PROD/XXX-microservice \
-H 'Content-Type: application/json' \
-H 'x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d '{
"initData": "HI",
"name": "vaquar khan",
"likes": "Java"
}'
API逍遥游玩会确保安全密钥验证,因此无需lambda 需要授权者
如果您要传递查询字符串
URL:
https://XXXX.XXXXX-api.ca-central-1.amazonaws.com/PROD/XXX-microservice ?x-api-key=XXXXXXXXXXXXXXXX &uid=5
from __future__ import print_function
import boto3
import json
print('Loading function')
def lambda_handler(event, context):
print(event['params']['querystring']['x-api-key'])
print(event['params']['querystring']['uid'])