Я разработал собственный лямбда-авторизатор с использованием .NET Core. Обработчик получает API-ключ от объекта Request и затем делает следующее:
1> Убедитесь, что API-ключ существует
2> Получить план использования по ID
3> Получить текущее использование для API-ключа
4> TODO: Теперь я хочу уменьшить оставшееся использование API-KEY на 1. Несколько вещей, которые я не могу понять
а) как я могу получить значение текущего использования от GetUsageResponse.Items
б) какие значения должны идти в PatchOperation для обновления использования?
public async Task<APIGatewayCustomAuthorizerResponse> FunctionHandler(APIGatewayCustomAuthorizerRequest authEvent, ILambdaContext context)
{
var key = authEvent.QueryStringParameters["key"];
var isAuthorized = CheckAuthorization(key);
var authPolicy = CreateAuthPolicy(isAuthorized);
return authPolicy;
}
private async Task<bool> CheckAuthorization(string key)
{
var client = new Amazon.APIGateway.AmazonAPIGatewayClient();
var response = await client.GetApiKeysAsync(new GetApiKeysRequest()
{
IncludeValues = true
});
var apiKey = response.Items.SingleOrDefault(x => x.Value == key);
if (apiKey == null)
{
return false;
}
// Get Usage Plan
var usagePlan = await client.GetUsagePlanAsync(new GetUsagePlanRequest()
{
UsagePlanId = "myUsagePlanID"
});
//Get API-KEY's Usage for current month
var usage = await client.GetUsageAsync(new GetUsageRequest()
{
KeyId = apiKey.Id,
UsagePlanId = "myUsagePlanID",
StartDate = "2019-01-01",
EndDate = "2019-01-31"
});
//TODO a)how do i get value of the current usage from `usage.Items`
//TODO b) what values should go in PatchOperation to update Usage?
var operations = new List<PatchOperation>();
var operation = new PatchOperation()
{
From ="???",
Op = "????",
Path = "????",
Value ="????"
};
operations.Add(operation);
await client.UpdateUsageAsync(new UpdateUsageRequest()
{
KeyId = apiKey.Id,
UsagePlanId = "myUsagePlanID",
PatchOperations = operations
});
return true;
}