如何解决无服务器警告:存在以下情况时,无响应PrincipalID
尝试将serverless-local-authorizers-plugin集成到使用AWS Lambda Authorizer的系统。当我打印响应时,它确实包含一个principalId
,并且和在线lambda响应一样,它在一个对象中返回。为什么我会收到错误的任何想法
Serverless: Warning: No principalId in response
?
返回方式:
{
"principalId":"user","policyDocument":{
"Version":"2012-10-17","Statement":[{
"Action":"execute-api:Invoke","Effect":"Deny","Resource":"arn:aws:execute-api:eu-central-1:my-AWS-ID:*"}
]},"context":{
"platformRoles":"Guest","userId":"unknown"
}
}
本地身份验证代理功能
const AWS = require('aws-sdk');
const mylocalAuthProxyFn = async (event,context) => {
const lambda = new AWS.Lambda();
const req = {
FunctionName: 'my-lambda-function-name',InvocationType: 'RequestResponse',Payload: JSON.stringify(event)
};
const results = await lambda.invoke(req).promise();
if (results.StatusCode === 200) {
return results.Payload;
}
throw new Error('Unauthorized');
};
module.exports = { mylocalAuthProxyFn };
解决方法
这是我弄清楚的作品。与图书馆工作人员交谈后,出于某种原因,在我看来,响应必须是一个明确的对象。他们声称您可以发送promise的references变量,但是对我来说不起作用。但是下面的确如此:
const AWS = require('aws-sdk');
const mylocalAuthProxyFn = async (event,context) => {
const lambda = new AWS.Lambda();
const req = {
FunctionName: 'aidonic-endpoints-dev-createAuthorization',InvocationType: 'RequestResponse',Payload: JSON.stringify(event)
};
const result = await lambda.invoke(req).promise();
if (result.StatusCode === 200) {
const pl = JSON.parse(result.Payload);
return {
principalId: pl.principalId,policyDocument: {
Version: '2012-10-17',Statement: [
{
Action: 'execute-api:Invoke',Effect: 'Allow',Resource: '*'
}
]
},context: {
platformRoles: 'Verified Organization Representative,Registered User',userId: '23e8320fcechi042389h02ijwqwd'
}
};
}
throw new Error('Unauthorized');
};
module.exports = { mylocalAuthProxyFn };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。