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 请求
Telegram Bot(用 python 编码)与 AWS API Gateway 集成