Я написал простую лямбда-функцию в Micronauts / Groovy для возврата политик Allow / Deny в качестве авторизатора шлюза API AWS.При использовании в качестве авторизатора шлюза API JSON не может быть проанализирован
Выполнение не выполнено из-за ошибки конфигурации: не удалось проанализировать политику
При локальном тестировании ответ имеет правильное свойстводело в JSON.Например:
{
"principalId": "user",
"PolicyDocument": {
"Context": {
"stringKey": "1551172564541"
},
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": "arn:aws:execute-api:eu-west-1:<account>:<ref>/*/GET/"
}
]
}}
Когда он выполняется в AWS, ответ JSON имеет свойства в нижнем регистре:
{
"principalId": "user",
"policyDocument": {
"context": {
"stringKey": "1551172664327"
},
"version": "2012-10-17",
"statement": [
{
"resource": "arn:aws:execute-api:eu-west-1:<account>:<ref>/*/GET/",
"action": "execute-api:Invoke",
"effect": "Allow"
}
]
}
}
Не уверен, что регистр соответствуетпроблема, но я не вижу, что еще может быть проблема (перепробовал много вариантов в выводе).Я пробовал различные аннотации Джексона (@JsonNaming (PropertyNamingStrategy.UpperCamelCaseStrategy.class) и т. Д.), Но, похоже, они не влияют на вывод в AWS.
Есть идеи, как это отсортировать?Спасибо.
Пример кода:
пытается получить вывод, похожий на пример .
Запуск примера локально с использованием
runtime "io.micronaut:micronaut-function-web"
runtime "io.micronaut:micronaut-http-server-netty"
Обработчик лямбда-функции:
AuthResponse sessionAuth(APIGatewayProxyRequestEvent event) {
AuthResponse authResponse = new AuthResponse()
authResponse.principalId = 'user'
authResponse.policyDocument = new PolicyDocument()
authResponse.policyDocument.version = "2012-10-17"
authResponse.policyDocument.setStatement([new session.auth.Statement(
Effect: Statement.Effect.Allow,
Action:"execute-api:Invoke",
Resource: "arn:aws:execute-api:eu-west-1:<account>:<ref>/*/GET/"
)])
return authResponse
}
AuthResponse выглядит так:
@CompileStatic
class AuthResponse {
String principalId
PolicyDocument policyDocument
}
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
@CompileStatic
class PolicyDocument {
String Version
List<Statement> Statement = []
}
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
@CompileStatic
class Statement {
String Action
String Effect
String Resource
}