使用 HTTP 代理访问 AWS API Gateway 中的标头?

Posted

技术标签:

【中文标题】使用 HTTP 代理访问 AWS API Gateway 中的标头?【英文标题】:Access headers in AWS API Gateway using HTTP Proxy? 【发布时间】:2016-05-03 05:17:03 【问题描述】:

我正在使用 AWS API Gateway,它是 HTTP 代理,

我需要通过 AWS API Gateway 将 Authorization 标头传递给我的端点

我尝试过的事情:

像这样设置方法请求,

集成请求设置

这不起作用,我的应用没有收到授权标头,

我也尝试过使用映射模板


  "method": "$context.httpMethod",
  "body" : $input.json('$'),
  "headers": 
    #foreach($param in $input.params().header.keySet())
    "$param": "$util.escapejavascript($input.params().header.get($param))" #if($foreach.hasNext),#end

    #end
  ,
  "queryParams": 
    #foreach($param in $input.params().querystring.keySet())
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end

    #end
  ,
  "pathParams": 
    #foreach($param in $input.params().path.keySet())
    "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end

    #end
    

这也不起作用。

谁能给我一些关于如何实现的提示?

【问题讨论】:

【参考方案1】:

出于安全原因,API Gateway 会去除 AWS SigV4 授权标头。如果您使用 OAuth 等其他授权机制,则不会剥离标头。

【讨论】:

所以我可以假设不可能通过 Authorization 标头? @user3384147:很抱歉延迟回复。如果您使用 AWS SigV4 以外的任何授权,则可以传递授权标头。当您使用 SigV4 时,AWS 会使用 Authorization 标头并因此将其剥离。您使用的是什么授权? 我试图通过强制我的客户在 boto 中使用端点 URL 指向我的 APIGw 来保护 API,然后我拦截调用并验证传递给 API 的一些参数(哪个 IAM目前不支持/没有任何条件键),我还将验证他们的 sig4v(因为我们的服务给了他们密钥)如果请求看起来不错,我将使用我的 lambdas IAM 角色将其传递给 API 以实际执行它。但要做到这一点,我更愿意看到 Sigv4,否则他们不能使用像 awscli 这样的原生工具链来调用服务,并且需要自定义身份验证任何想法?【参考方案2】:

最近我不得不尝试使用 API Gateway HTTP 代理将 AWS SigV4 HTTP 请求传递到端点。 经过测试调试发现Authorization正在被消费,没有通过! 因此,在将请求发送到 API 网关时 - 我将授权和授权副本作为另一个标头“myauth”发送。 (我能够做到这一点,因为请求来自我自己的客户。)

在方法请求中,我添加了 Authorization 和 myauth 作为 HTTP 标头 Method Request - HTTP Headers

在集成请求 - HTTP 标头中,我将 myauth 映射到授权,然后再将其转发到端点

Integration Request - HTTP Headers

不知道这是否是最好的方法,或者是否可能存在任何潜在问题,但这有效!希望这可以帮助某人或提供一些想法。

【讨论】:

以上是关于使用 HTTP 代理访问 AWS API Gateway 中的标头?的主要内容,如果未能解决你的问题,请参考以下文章

AWS API Gateway - 通过公司代理发送请求

HTTP 请求正文未通过 AWS API Gateway 访问 AWS lambda 函数

使用 Cloudformation 的 AWS Api Gateway 代理资源?

使用代理通过 AWS API Gateway 的 Lambda 错误

使用代理集成通过 API Gateway 触发 AWS Lambda

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