Я создал Lambda Authorizer на AWS API Gateway, который вызывает функцию Lambda. Ниже приведен код в лямбда-функции, написанный на коде Node.js 8.0.
exports.handler = function(event, context, callback) {
var token = event.authorizationToken;
switch (token.toLowerCase()) {
case 'allow':
callback(null, generatePolicy('user', 'Allow', event.methodArn));
break;
case 'deny':
callback(null, generatePolicy('user', 'Deny', event.methodArn));
break;
case 'unauthorized':
callback("Unauthorized"); // Return a 401 Unauthorized response
break;
default:
callback("Error: Invalid token");
}
};
// Help function to generate an IAM policy
var generatePolicy = function(principalId, effect, resource) {
var authResponse = {};
authResponse.principalId = principalId;
if (effect && resource) {
var policyDocument = {};
policyDocument.Version = '2012-10-17';
policyDocument.Statement = [];
var statementOne = {};
statementOne.Action = 'execute-api:Invoke';
statementOne.Effect = effect;
statementOne.Resource = resource;
policyDocument.Statement[0] = statementOne;
authResponse.policyDocument = policyDocument;
}
// Optional output with custom properties of the String, Number or Boolean type.
authResponse.context = {
"stringKey": "stringval",
"numberKey": 123,
"booleanKey": true
};
return authResponse;
}
(приведенный выше пример кода с веб-сайта https://markpollmann.com/lambda-authorizer/)
Если я сохраню и протестирую эту функцию, передав недействительное значение для authorizationToken, я получу ожидаемый результат, который ниже.
Response:
{
"errorMessage": "Error: Invalid token"
}
Request ID:
"e93567c0-fcbb-4cb1-b0b3-28e9c1b30162"
Но если я вызову этот API из Почтальона, передав значение в заголовке, я получу следующий ответ. Я получаю эту ошибку для любого значения в заголовке, т.е. отрицать, разрешить, неавторизованный, неправильный и т. Д.
{
"message": null
}
Сообщение о статусе в почтальоне показывает «500 Internal Server Error». Ниже приведена подробная информация из заголовка раздела почтальона.
content-length →16
content-type →application/json
date →Fri, 08 Mar 2019 14:07:57 GMT
status →500
x-amz-apigw-id →W89kFDRDoEFxYg=
x-amzn-errortype →AuthorizerConfigurationException
x-amzn-requestid →92f31d11-41ab-11e9-9c36-97d38d96f31b
Я не понимаю, почему API возвращает вышеуказанный ответ и сообщение об ошибке, в то время как лямбда-тест работает нормально.
Я уже прошел следующие две темы в SO, но ответы / комментарии не могли помочь в моем случае.
AWS API Gateway с пользовательским авторизатором возвращает AuthorizerConfigurationException
AWS API Gateway Custom Authorizer AuthorizerConfigurationException