Я сделал собственный лямбда-авторизатор, который проверяет JWT и возвращает политику Allow
.
var context = new APIGatewayCustomAuthorizerContextOutput();
var tokenUse = ExtractClaims(claims, "token_use");
context["tokenType"] = tokenUse;
var response = new APIGatewayCustomAuthorizerResponse
{
PrincipalID = "asd",
PolicyDocument = new APIGatewayCustomAuthorizerPolicy
{
Version = "2012-10-17",
Statement = new List<APIGatewayCustomAuthorizerPolicy.IAMPolicyStatement>()
{
new APIGatewayCustomAuthorizerPolicy.IAMPolicyStatement
{
Action = new HashSet<string>() {"execute-api:Invoke"},
Effect = "Allow",
Resource = new HashSet<string>() {"***"} // resource arn here
}
},
},
Context = context
};
return response;
Теперь мне нужно использовать это удостоверение на моем сервере ресурсов.
Проблема в том,что утверждения, которые я помещаю в контекст авторизатора, отображаются в authorizer
напрямую
"authorizer": {
"cognito:groups": "Admin", ...
}
, но мои Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
ожидают их в authorizer.claims
.
примерно так:
"authorizer": {
"claims": {
"cognito:groups": "Admin", ...
}
}
И я знаю это, потому что он работал, когда я использовал встроенный авторизатор Cognito User Pool, который делал ввод таким образом.
Мне удалось обнаружить, что Lambda Authorizer не разрешено добавлять вложенные объекты в контекст (и проверил, что он выдает authorizer error
, если я это сделаю).
Я также обнаружил, что когда извлекается APIGatewayProxyFunction
Идентичность, он смотрит на Authorizer.Claims.
Поэтому мне нужно либо извлечь их на моем сервере ресурсов, минуя свойство Claims
, либо добавить вложенный объект в ответ авторизатора, что недопустимо.
Что делать?