如何在AWS Lambda函数中验证API密钥

时间:2019-01-02 23:59:56

标签: amazon-web-services aws-lambda aws-api-gateway

我已经阅读了很多类似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软件包?

请注意,即使出于安全原因不建议使用查询字符串支持,但也无法辩论

1 个答案:

答案 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

Python 2.7

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'])