У меня есть AWS Lambda Authorizer, который имеет тип запроса, я передаю sessionToken в заголовках и имя пользователя в queryString Параметры в лямбда-функциях моего Authorizer, но он дает мне ошибку {"errorMessage":"RequestId: 97d57a97-3baf-421f-aabc-88ed5f6dd4ef Process exited before completing request"}
Mon Sep 23 10:05:39 UTC 2019 : AuthorizerConfigurationException
Вот моя авторизация lambdaкод функции:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({ region: 'ap-south-1', apiVersion: '2012-08-10' });
exports.handler = function(event, context, callback) {
var userSessionToken = event.headers.sessionToken;
var userEmailId = event.queryStringParameters.emailId;
var tmp = event.methodArn.split(':');
var apiGatewayArnTmp = tmp[5].split('/');
var resource = '/';
if (apiGatewayArnTmp[3]) {
resource += apiGatewayArnTmp[3];
}
var authResponse = {};
if (userSessionToken && userEmailId) {
callback(null, validateUserSession(userSessionToken, userEmailId));
} else {
callback("session token or email id is missing");
}
const generatePolicy = (principalId, effect, resource) => {
var authResponse = {};
authResponse.principalId = principalId;
if (effect && resource) {
var policyDocument = {};
policyDocument.Version = '2012-10-17'; // default version
policyDocument.Statement = [];
var statementOne = {};
statementOne.Action = 'execute-api:Invoke'; // default action
statementOne.Effect = effect;
statementOne.Resource = resource;
policyDocument.Statement[0] = statementOne;
authResponse.policyDocument = policyDocument;
}
return authResponse;
}
const generateAllow = (principalId, resource) => {
return generatePolicy(principalId, 'Allow', resource);
};
const generateDeny = (principalId, resource) => {
return generatePolicy(principalId, "Deny", resource);
}
const validateUserSession = (userSessionToken, userEmailId) => {
var params = {
Key: {
"username": {
S: userEmailId
},
"sessionToken": {
S: userSessionToken
}
},
TableName: "mytable"
};
dynamodb.getItem(params, function(err, data) {
if(err) {
callback(null, generateDeny('user', event.methodArn));
} else {
let currentUnixTime = new Date().getTime();
let sessionTime = data.Item.session_created_at.N;
let isSessionExpired = (currentUnixTime - 900) < sessionTime;
if(isSessionExpired){
callback(null, generateDeny('user', event.methodArn));
} else {
callback(null, generateAllow('user', event.methodArn));
}
}
});
}
};
Здесь я запрашиваю таблицу DynamodB с помощью sessionToken и имени пользователя, если она существует и имеет менее 15 минут раньше времени, в противном случае я хотел бы предоставить доступ.Но когда я тестирую свой авторизатор, он выдает ошибку