401的自定义响应Lambda Authorizer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了401的自定义响应Lambda Authorizer相关的知识,希望对你有一定的参考价值。

使用错误参数中的字符串Unauthorized从Lambda Authorizer调用Lambda回调函数将返回与主体的401响应:

{ "message": "Unauthorized" }

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

{ "message": null }

如果您在回调的结果参数中返回拒绝策略文档,则会得到403,其响应类似于:

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

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

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

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

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

ResultObject.context.stringKey = 'My custom response'

这有效,并记录在案here

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

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

答案

很抱歉不回答你的直接问题,但我认为人们(像我一样)在查看如何实现问题的第一部分时会遇到这个问题(从授权人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"
}

以上是关于401的自定义响应Lambda Authorizer的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC(或 Spring Boot)。针对安全相关异常(例如 401 Unauthorized 或 403 Forbidden)的自定义 JSON 响应)

WebApi 2始终使用自定义JWT令牌返回401授权

ServiceStack 对身份验证失败的自定义响应

如何使 ASP.NET Web API 正确响应 403 或 401?

Spring OAuth2 - oauth/authorize 的自定义“OAuth Approval”页面

ASP.NET Core 5 JWT 身份验证失败,响应代码为 401