【发布时间】:2019-09-23 19:25:36
【问题描述】:
我有一个 AWS Lambda 授权器,它是请求类型,我在我的授权器 lambda 函数中的标头中传递 sessionToken,在 queryString 参数中传递用户名
但它给了我{"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));
}
}
});
}
};
在这里,我正在使用 sessionToken 和用户名查询 dynamodb 表,如果它存在并且在时间之前不到 15 分钟我想授予访问权限,否则不。 但是当我测试我的授权人时它会产生错误
【问题讨论】:
标签: amazon-web-services aws-lambda aws-api-gateway