我有使用 serverless-http 创建快速服务器的无服务器 lambda 函数 (AWS)。我用来验证请求的自定义授权器在成功运行后超时。以下是根据 CloudWatch 日志返回的策略:
2019-02-27T12:06:49.000Z 7b138c38-b316-4ae0-97ad-36242833cefa 策略 [ { 操作:'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 秒后超时
我应该在 auth 之后执行的函数甚至没有被调用。我正在使用 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
注意:如果我使用插件在本地运行它,同样的工作。