如何从 AWS HTTP API-Gateway 获取 401 状态码

How to get 401 status code from AWS HTTP API-Gateway

我正在使用 lambda 函数作为我的 HTTP API-Gateway 的身份验证器,我在简单响应中计算了三种情况-

  1. 当“isAuthenticated”= True --> 200 并且请求通过时
  2. 当“isAuthenticated”= False --> 403 并且它 return 禁止
  3. 当 header 中缺少身份验证密钥时 --> 401

我想在“isAuthenticated”= False 时 return 401 或找到从 API-Gateway/authorizer 发送 401 错误代码的方法,在 REST API-Gateway 中,这可以通过提高带有“未授权”的 error/exception。但这对于 REST API-Gateway.

是不可能的

我几乎尝试了所有方法来发送来自简单和策略 HTTP API-Gateway 的响应,例如引发 Exceptions/Error/callback 甚至 returning null。

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

在您的 lambda 中,您可以设置响应代码和正文,并且 return 将其设置为 HTTP API 网关。例如

exports.handler = async (event) => {
    const unauthorisedResponse = {
        statusCode: 401,
        body: "Unauthorised"
    };
    return unauthorisedResponse;
};

我来晚了(在这里偶然发现了其他东西)但简而言之答案是 不,你不能

HTTP API 专门设计得更简单,配置更少,因此 return 您想要的响应代码的自由度较低。

对于遇到此问题的任何人,此处提供了有关 lambda 授权器如何简单地用于 HTTP API(而非 REST API)的更多信息。

使用 HTTP API,使 lambda 授权方具有简单的响应格式(不是 IAM)。并且 return 以下 json 来自您的函数:

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

返回 isAuthorized = false,将导致 HTTP 网关自动 return 一个 403 (Forbidden) 给调用者。省略您的授权人所需的身份源 (parameters/headers) 将 return 一个 401 Unauthorized 而不会执行您的 lambda。显然 isAuthorized = true return 是一个 200 Success,它使用你放在上下文中的内容为 API 路由执行下一个 lambda。

查看此处了解更多信息:Lambda Authorizers AWS Docs

有关状态代码 returned 和演练的详细信息,请参阅此处:AWS Walkthrough from AWS Blog