【问题标题】:Custom response Lambda Authorizer for 401401 的自定义响应 Lambda 授权方
【发布时间】:2019-01-16 02:53:12
【问题描述】:

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

{ "message": "Unauthorized" }

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

{ "message": null }

如果您在回调的结果参数中返回拒绝策略文档,您将收到 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 相同的网关响应,但如果我在错误参数中使用任何字符串(“未授权”除外)点击回调,我会收到空​​消息。我无法返回结果参数,因为这需要是包含策略文档的响应结构。

关于如何使用 401 返回自定义响应有什么想法吗?

【问题讨论】:

  • 您想在业务规则方面实现什么目标?
  • 我们要根据AuthorizationToken是否不是我们期望的结构、不是我们签名、过期等等返回不同的响应消息
  • 那么你不应该这样做!因为您可能会向攻击者透露重要信息。在这种情况下,您的应用程序应该将用户重定向到登录屏幕,仅此而已。然后在用户使用另一个端点登录时重新生成令牌,如果你愿意,这个令牌生成端点可以提供更详细的消息,但我会限制在任何情况下用户/密码不匹配或类似的东西。
  • 感谢您的建议,但我是否应该针对所有场景返回相同的响应,并使用除“未经授权”之外的不同消息,这可能吗?
  • 不,我认为不可能。

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


【解决方案1】:

很抱歉没有回答您的直接问题,但我认为人们(像我一样)在查看如何实现问题的第一部分时可能会遇到此线程(从授权方 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 响应?
  • 没有回答问题
【解决方案2】:

需要引发异常,所以在使用节点时:

context.fail("Unauthorized");

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 2019-12-15
    • 2019-12-12
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2020-05-28
    相关资源
    最近更新 更多