【问题标题】:AWS API Gateway Simple Lamda Authorizer failing when used with HTTP API that's using private resource integrationAWS API Gateway Simple Lamda Authorizer 在与使用私有资源集成的 HTTP API 一起使用时失败
【发布时间】:2021-12-10 22:29:16
【问题描述】:

我已使用 HTTP API 设置 API Gateway,该 API 使用 VPC 链接配置为私有应用程序负载均衡器。

我有一条使用此集成的路线,我可以请求我的路线我从我的 API 获得了成功的响应。

当我现在想保护这条路线时,问题就来了。 我选择了一个简单的 lambda 授权器并设置了一个我在许多 tuts 中看到的基本示例:

exports.handler = async(event, context) => {
    let response = {
        "isAuthorized": false,
        "context": {
            "AuthInfo": "defaultdeny"
        }
    };
    if (event.headers.authorization === "Bearer secretToken") {
        response = {
            "isAuthorized": true,
            "context": {
                "AuthInfo": "Customer1"
            }
        };
    }
    return response;
};

当我附上我的授权人时,我会得到:

{
    "statusCode": 401,
    "error": "Unauthorized",
    "message": "Invalid token."
}

此响应似乎不是来自授权方,因为在云手表中我可以看到授权方正在返回 true。

我不确定是否因为我正在使用与 VPC 链接的集成访问私有资源,是否还有其他需要做的事情,或者我缺少什么。

在这种情况下,我很难找到任何关于授权人的文档。

非常感谢任何帮助。

授权人设置

【问题讨论】:

  • 私有集成应该不是问题,因为我之前使用过授权器 lambda 和私有 VPC 集成。您能否分享一下您是如何在 HTTP API 中配置授权方 lambda 的(因为根据配置,预期响应有不同的版本)。
  • 在这种情况下,您能否将配置的屏幕截图添加到问题中?
  • 我在控制台配置,选择类型:Lambda,从post中选择lambda函数,payload格式版本:2.0,响应模式:简单,身份来源$request.header.Authorization,自动授予API调用您的 Lambda 函数的网关权限已开启。
  • 在帖子中附上截图
  • 源站服务上是否运行了其他身份验证机制?

标签: amazon-web-services aws-lambda amazon-vpc strapi amazon-api-gateway


【解决方案1】:

我的 Api 是 Strapi CMS,如果您将授权标头传递给端点,即使是公共的(就像我一样),使用 Strapi 时,它自己的身份验证就会启动。

所以当标头从 lambda 授权者传递到 Strapi 时,Strapis auth 开始了。非常感谢@stijndepestel

【讨论】:

  • 对于任何可能遇到此问题或类似问题的人。我无法轻易更改 Strapis 的行为,所以我只是更改了发送令牌的标头。 header.auth,然后您将其更改为 lambda 和授权者。
猜你喜欢
  • 2019-06-04
  • 2020-09-21
  • 2022-08-16
  • 2019-08-20
  • 2021-12-14
  • 1970-01-01
  • 2018-12-25
  • 2019-06-09
  • 2018-05-25
相关资源
最近更新 更多