AWS Api Gateway 硬编码查询字符串参数

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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_urlentities"
  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'"
  

解释:

    api会收到请求 它将get请求转发到定义的uri:var.yext_base_url/entities 它会将api-key 标头附加到请求中,并将变量传递给 terraform 它将content-type标头附加到带有静态值的请求 它将附加查询参数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 接收到的请求中映射。

您可以在here 和here 找到更多信息。

【讨论】:

抱歉,每当我尝试设置静态值而不是实际映射时,我都会收到错误消息,并且无法保存。你能不能给我发一个截图或其他东西,确切地说在哪里做,你增加了什么价值,这会让你节省? AWS 文档似乎对我没有太大帮助 :( 文字太大,无法评论,我会添加另一个答案

以上是关于AWS Api Gateway 硬编码查询字符串参数的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS API Gateway iOS SDK 中传递查询字符串参数

从查询字符串中的令牌授权 AWS API Gateway 请求

AWS API-Gateway:指定的缓存键参数无效

Telegram Bot(用 python 编码)与 AWS API Gateway 集成

如何将参数从 POST 从 Amazon API Gateway 传递到 AWS Lambda

AWS API Gateway:获取或发布以进行查询