使用错误参数中的字符串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返回自定义响应的任何想法?
答案 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/