【问题标题】:Serverless warning: No principalId in response when there is无服务器警告:有响应时没有 principalId
【发布时间】:2020-08-12 23:22:59
【问题描述】:

尝试将 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 };

【问题讨论】:

    标签: aws-lambda local serverless aws-serverless lambda-authorizer


    【解决方案1】:

    这是我想出的作品。在与图书馆所有者交谈后,出于某种原因,在我的情况下,响应必须是一个明确的对象。他们声称您可以发送 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 };
    

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 2011-08-22
      • 2017-01-09
      • 2017-01-04
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多