Я раньше не пользовался пользовательскими авторизаторами, но я собрал небольшой проект Hello World, чтобы попробовать это, и вот что я нашел.
Защищенная функция и функция авторизации:
def authorize(event:, context:)
{
"principalId": "test",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": event["methodArn"]
}
]
}
}
end
def hello(event:, context:)
{ statusCode: 200, body: JSON.generate('This is a protected endpoint!') }
end
Обратите внимание, что я возвращаю хэш, а не строку с to_json
, я получил ошибку от авторизатора при использовании to_json
.
Также обратите внимание, что я использую event["methodArn"]
для получения защищенного лямбда-ARN, использование context.invoked_function_arn
также вызвало ошибку.
Кроме того, не включая заголовок авторизации в запросе, будет возвращено «Несанкционированная ошибка»:
curl -X GET https://endpoint/dev/hello -H 'Authorization: test'
Наконец, о principalId
:
PrincipalId - обязательное свойство в вашем ответе авторизатора. Он представляет основной идентификатор вызывающего абонента. Это может варьироваться от приложения к приложению, но это может быть имя пользователя, адрес электронной почты или уникальный идентификатор.
Источник: https://www.alexdebrie.com/posts/lambda-custom-authorizers/