我正在尝试使用node.js async / await而不是回调在aws上创建lambda授权者,但是没有有关如何创建返回到API网关的HTTP响应的信息。例如,如果我返回此:
{
statusCode: 401
}
API网关似乎无法理解并向客户端返回错误403:
{
"statusCode": 403,
"error": "Forbidden",
"message": "No principalId set on the Response"
}
有人知道如何执行此处描述的操作:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html 但使用异步/等待?
谢谢!
编辑:
返回错误401的方法只是抛出这样的错误:
throw new Error("Unauthorized")
而且,如果用户明确拒绝/允许,则只需返回JSON策略即可。
答案 0 :(得分:4)
要返回401错误,您只需要引发一条带有“未经授权”字样的错误,就像这样:
throw new Error("Unauthorized")
如果用户明确拒绝/允许,则只需像处理回调一样返回JSON策略即可。
答案 1 :(得分:1)
我认为已接受的解决方案不再起作用。我这样尝试过:
exports.authorize = async (event, context) => {
throw new Error("Unauthorized")
}
它可以工作,但是在我的日志中我可以看到此错误:
ERROR Invoke Error {"errorType":"Error","errorMessage":"Unauthorized","stack":["Error: Unauthorized"," at Runtime.exports.authorize [as handler] (/var/task/handler/auth.js:21:13)"," at processTicksAndRejections (internal/process/task_queues.js:97:5)"]}
答案 2 :(得分:0)
从我读到的内容(一些代码示例可能会有所帮助),听起来好像您没有正确地调用回调函数,或者未在正确的位置调用它。您可以使用
callback("Some error message.");
发回带有401状态代码的响应。您还可以通过执行以下操作来更改此设置:
var response = {
statusCode: 401, /* some number */
body: "Oops!" /* some message */
};
callback(null, response);
我会签出this页面以获取更多信息。