在Node.js中使用异步/等待的Lambda授权者响应

时间:2019-03-11 16:21:41

标签: node.js amazon-web-services aws-lambda

我正在尝试使用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策略即可。

3 个答案:

答案 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页面以获取更多信息。