首页 > 解决方案 > 如何从 AWS HTTP API-Gateway 获取 401 状态码

问题描述

我正在使用 lambda 函数作为我的 HTTP API-Gateway 的身份验证器,我在 Simple Response 中发现了三种情况-

  1. 当 "isAuthenticated" = True --> 200 并且请求通过
  2. 当 "isAuthenticated" = False --> 403 并且它返回 Forbidden
  3. 当标头中缺少身份验证密钥时-> 401

我想在“isAuthenticated”= False 时返回 401,或者找到一种从 API-Gateway/授权方发送 401 错误代码的方法,在 REST API-Gateway 中,这可以通过使用“未授权”引发错误/异常来实现。但这对于 REST API-Gateway 是不可能的。

我已经尝试了几乎所有方法来从简单的以及策略 HTTP API-Gateway 发送响应,例如引发异常/错误/回调甚至返回 null。

当用户未通过身份验证时,我有没有办法返回 401?StackOverflow 上有很多类似的问题,但主要是针对 REST API-Gateway,我的问题是针对 HTTP API-Gateway 的

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


我迟到了(在这里偶然发现了其他东西),但简而言之,答案是“不,你不能” 。

HTTP API 专门设计得更简单,配置更少,因此返回所需响应代码的自由度更低。

对于遇到这个问题的人来说,这里有更多关于简单 lambda 授权器如何为 HTTP API(而不是 REST API)工作的信息。

使用 HTTP API,使 lambda 授权者具有简单的响应格式(不是 IAM)。并从您的函数中返回以下 json:

return {
    "isAuthorized": false/true,
    "context": {
        "somethingLikeUserIdOptional": 123,
    }
}

返回isAuthorized = false, 将导致 HTTP 网关自动返回一个403 (Forbidden)给调用者。为您的授权者省略所需的身份源(参数/标头)将返回 a401 Unauthorized而不会执行您的 lambda。显然isAuthorized = true返回 a 200 Success,并使用您放入上下文中的内容执行 API 路由的下一个 lambda。

请参阅此处了解更多信息:Lambda 授权者 AWS Docs

有关返回的状态代码和演练的详细信息,请参阅此处:AWS 博客中的 AWS 演练


推荐阅读