401

时间:2018-08-08 18:33:17

标签: amazon-web-services aws-lambda aws-api-gateway lambda-authorizer

使用错误参数中的字符串Unauthorized从Lambda授权器调用Lambda回调函数将返回带有正文的401响应:

{ "message": "Unauthorized" }

尝试在响应中使用任何其他字符串都会导致响应:

{ "message": null }

如果相反,您在回调的result参数中返回“拒绝策略文档”,则会收到403,其响应如下:

{ "message": "Unable to access resource with an explicit deny" }

环顾四周之后,您似乎需要配置网关响应,以从Lambda授权器返回自定义响应,我已经在处理403响应,但无法弄清楚如何对401执行此操作。

对于403,我使用以下模板创建了网关响应:

{\"message\":\"$context.authorizer.stringKey\"}

然后在结果对象上设置以下内容

ResultObject.context.stringKey = 'My custom response'

此方法有效,并记录在here中。

但是,对于401,因为我没有返回政策文件,所以我不知道如何使用自定义响应。我创建了与403相同的网关响应,但是如果我在错误参数中用任何字符串(“ Unauthorized”以外的字符串)调用了回调,则会收到空消息。我无法返回结果参数,因为它必须是包含策略文档的响应结构。

关于如何使用401返回自定义响应的任何想法?

2 个答案:

答案 0 :(得分:0)

很抱歉没有回答您的直接问题,但是我确实认为人们(像我一样)在探讨如何实现问题的第一部分时可能会遇到此问题(返回授权者lambda的401响应)。您可以按照AWS示例here

TL; DR:

对于异步功能,抛出一个错误,其消息完全匹配字符串"Unauthorized"

exports.handler = async function (event) {
  ...
  throw Error("Unauthorized");
}

进行同步。函数,请使用第一个参数(错误响应)完全匹配与字符串"Unauthorized" 调用回调函数:

exports.handler =  function(event, context, callback) {
  ..
  callback("Unauthorized");  // Compared to a successful response `callback(null, ...)`
}

在两种情况下,由您的授权者lambda保护的API网关端点的响应均为:

401
{
  "message": "Unauthorized"
}

答案 1 :(得分:0)

您需要引发异常,因此在使用节点时:

context.fail("Unauthorized");

对于C#,请参见http://yogivalani.com/aws-custom-lambda-authorizer-returns-401-unauthorized/