【问题标题】:Getting 401 Unauthorized response when calling thru CloudFront endpoint通过 CloudFront 端点调用时获得 401 Unauthorized 响应
【发布时间】:2019-10-07 17:22:57
【问题描述】:

我们有一个设置,我们将 CloudFront 放在我们的后端 API(代理)前面。

所有端点几乎都成功了。 POST 请求正常,但 GET 请求没有。

-

调用代理:

POST https://proxy.api.com/add :: 响应成功!

GET https://proxy.api.com/ping :: 响应成功!

通过 CloudFront 调用:

POST https://abc.cloudfront.net/add :: 响应成功!

GET https://abc.cloudfront.net/ping :: 401 未经授权!

有什么想法吗?

【问题讨论】:

  • CloudFront 会在请求中剥离并添加很多东西,401 来自后端,您能否检查后端期望授权的信息,例如:Cloudfront 默认剥离授权标头。
  • 这对我来说是新的。一些 POST 请求需要 x-api-keyAuthorization 而 GET 请求需要 Authorization
  • x-api-key 由 cloudfront 转发到 origin,尝试将 Authorization 标头列入白名单并清除缓存再次测试是否有效。

标签: aws-api-gateway amazon-cloudfront api-gateway


【解决方案1】:

我在这里找到了答案401 Unauthorized!

问题:

GET 请求 Cloudfront 在将请求转发到源之前删除 Authorization 标头字段。 (见文档)aws doc

GET 和 HEAD 请求 - CloudFront 在将请求转发到您的源之前删除 Authorization 标头字段。

OPTIONS 请求 – 如果您将 CloudFront 配置为缓存对 OPTIONS 请求的响应,CloudFront 会在将请求转发到您的源之前删除 Authorization 标头字段。

DELETE、PATCH、POST 和 PUT 请求 - CloudFront 在将请求转发到您的源之前不会删除标头字段。

如何解决:

从 UI 控制台转到缓存行为设置和编辑 在 Cache Based on Selected Request 下选择 Whitelist,然后在 Whitelist Headers 下添加 Authorization

cloudfront

【讨论】:

    【解决方案2】:

    这是因为路径 ping/* 无法访问原点

    解决方案是在行为中添加此路径以禁用缓存并全部转到原点

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 2016-12-14
      • 2015-12-07
      • 1970-01-01
      • 2018-11-10
      • 2011-03-18
      相关资源
      最近更新 更多