У меня есть бессерверная лямбда-функция (AWS), которая создает экспресс-сервер с использованием serverless-http.Custom Authorizer, который я использую для аутентификации запросов, истекает после успешного запуска.ниже приведена политика, возвращаемая согласно журналам CloudWatch:
2019-02-27T12: 06: 49.000Z 7b138c38-b316-4ae0-97ad-36242833cefa policy [{Действие: 'execute-api: Invoke', Эффект: 'Разрешить', Ресурс: 'arn: aws: execute-api: eu-west-1: xxxx: xxxx / dev / GET / data / age'}]
После этого яполучить этот журнал:
2019-02-27T12: 06: 54.778Z 7b138c38-b316-4ae0-97ad-36242833cefa Время ожидания истекло через 6,01 секунды
Моя функция, котораядолжен был выполняться после того, как аутентификация даже не вызывается.я использую async / await, чтобы получить бизнес против токена авторизации в заголовке.
Вот мой код авторизатора:
if (business) {
console.log(
"policy",
generatePolicy(business, "Allow", event.methodArn).policyDocument.Statement
);
callback(null, generatePolicy(business, "Allow", event.methodArn));
return;
} else {
callback(null, generatePolicy(null, "Deny", event.methodArn));
return;
}
generatePolicy
Функция:
const generatePolicy = function(principalId, effect, resource) {
const authResponse = {};
authResponse.principalId = "Business";
if (effect && resource) {
const policyDocument = {};
policyDocument.Version = "2012-10-17";
policyDocument.Statement = [];
const statementOne = {};
statementOne.Action = "execute-api:Invoke";
statementOne.Effect = effect;
statementOne.Resource = resource;
policyDocument.Statement[0] = statementOne;
authResponse.policyDocument = policyDocument;
authResponse.context = {
business: principalId
};
}
return authResponse;
};
serverless.yml
:
myData:
handler: functions/myData.handler
events:
- http:
path: /data/{proxy+}
method: ANY
cors: true
authorizer: companyAuth
companyAuth:
handler: middleware/auth.company
cors: true
Примечание: то же самое работает, если я запускаю его локально с помощью плагина serverless-offline
.