【问题标题】:AWS Api Gateway hardcoded query string parameterAWS Api Gateway 硬编码查询字符串参数
【发布时间】:2020-11-25 15:41:21
【问题描述】:

我希望包装第三方资源,以便在没有作为查询参数发送的访问令牌的情况下公开它。

出于这个原因,我认为我可以使用 API 网关。

我找到了如何映射路径和查询参数,它们是从请求本身代理的。

但是是否有可能以某种方式在 API 网关内硬编码访问令牌,以传递到目的地,这样用户就不必将其包含在他们的请求中?

或者我唯一的选择是为此目的制作一个 Lambda...?

【问题讨论】:

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


    【解决方案1】:

    我使用 terraform 来创建这些资源。这是一个使用 terraform 进行 api 集成的示例:

    resource "aws_api_gateway_integration" "api_store_get_integration" {
      rest_api_id               = "${aws_api_gateway_rest_api.service_api.id}"
      resource_id               = "${aws_api_gateway_resource.store.id}"
      http_method               = "${aws_api_gateway_method.store_get.http_method}"
      integration_http_method   = "GET"
      type                      = "HTTP_PROXY"
      uri                       = "${var.yext_base_url}entities"
      passthrough_behavior      = "WHEN_NO_MATCH"
      request_parameters = {
        "integration.request.header.api-key"      = "'${var.yext_api_key}'",
        "integration.request.header.content-type" = "'application/json'",
        "integration.request.querystring.filter"  = "method.request.querystring.filter",
        "integration.request.querystring.v"       = "'20191001'"
      }
    }
    

    解释:

    1. api会收到请求
    2. 它将get请求转发到定义的uri:var.yext_base_url/entities
    3. 它会将api-key 标头附加到请求中,并将变量传递给 terraform
    4. 它将content-type标头附加到带有静态值的请求
    5. 它将附加查询参数v 与静态值'20191001'

    如果您不了解 terraform,它是一种工具,可以读取此文档并向 AWS 发送请求,以按照您定义的方式创建资源。在上面的 sn-p 的情况下,terraform 将接收两个变量 vat.yext_base_url 和 var.yext_api_key,将在配置中连接它们的值并在 AWS 中创建资源。

    我不知道您在使用什么,但在您的情况下,您需要找到更改集成请求配置的位置。尝试研究一下,如果找不到,我可以根据您的部署模型再次指导您。

    【讨论】:

    • 感谢您抽出宝贵时间,但我不确定您为什么假设我使用的是 Terraform,此外,在您的第一个答案中,没有任何内容提及这一点。我正在使用普通的旧 AWS API Gateway 配置。我可以使用 OpenAPI 或图形界面进行配置。我只是想通过网关将 GET api 代理到另一个具有访问令牌的 GET 请求上。我想在 API 网关中硬编码令牌,并将其作为查询参数传递给目标 URL。
    • Api Gateway 不会让我实现这一点,因为它需要一个映射的查询字符串值,该值在代理请求中提供。
    • 我没想到你会使用 terraform。我刚刚向您解释了 我正在使用 并向您展示了必须更改的值。总之,您必须找到在部署模型中配置查询字符串的位置并更改它。只是一个提示:如果你找到正确的地方,你可以将它们作为静态值而不是映射传递......
    【解决方案2】:

    是的,是的!我经常这样做。

    您需要创建一个 REST API 并使用 HTTP_PROXY 集成类型。

    配置集成时,您可以定义将发送到集成端点的 uri 和请求参数。在这种情况下,您可以将查询参数作为静态值添加到请求中,而不是从 API 接收到的请求中映射。

    您可以在herehere 找到更多信息。

    【讨论】:

    • 抱歉,每当我尝试设置静态值而不是实际映射时,我都会收到错误消息,并且无法保存。你能不能给我发一个截图或其他东西,确切地说在哪里做,你增加了什么价值,这会让你节省? AWS 文档似乎对我没有太大帮助 :(
    • 文字太大,无法评论,我会添加另一个答案
    猜你喜欢
    • 2016-11-18
    • 2021-01-13
    • 1970-01-01
    • 2021-05-24
    • 2017-11-14
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多