无服务器警告:存在以下情况时,无响应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 };