aws-lambda - 无服务器警告:有响应时没有 principalId
问题描述
尝试将serverless-local-authorizers-plugin集成到使用 AWS Lambda Authorizer 的系统中。当我打印响应时,它确实包含 aprincipalId
并且我在一个对象中返回它,就像在线 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 };
推荐阅读
- azure-cosmosdb - 对于将按日期和 ID 查询的数据,使用“当前日期”是否是一个好的分区键?
- python - 如何使用嵌套目录创建多个文件路径?
- xpath - 在机器人框架内找到元素变量中的 xpath
- css - CSS背景混合模式黑色蒙版
- python - Pandas:带有浮点数和字符串列表的前 N 个结果
- google-chrome - 在 Chrome 网页中调试 Flutter
- python - 生成形式的 Odoo 时间与计划时间不同
- c - 最适合计算小型 (4x4) 非对称、非稀疏实矩阵的最大特征值的 lapack 函数
- python - 我的 django 表单如何获取当前用户名和电子邮件并将它们提交到另一个数据库表中?
- nlp - 如何同时进行序列标记和实体关系标记