Missing Authentication Token Error with CloudFront & API Gateway
我已经设置了一个以 API 网关作为来源之一的 CloudFront 分发,并且此 API 网关配置了 AWS IAM 授权方。
当使用授权标头调用 CloudFront url 时,它会返回 403 错误。
1 2 3
| {
"message":"Missing Authentication Token"
} |
但是,当调用 API Gateway url 而不是具有相同 Authorization 标头的 CloudFront url 时,它可以工作。
我还尝试通过 CloudFront url 在没有任何授权者的情况下调用端点并且它有效。关于如何解决这个问题的任何想法。
- 在路由到 API Gateway 的 CloudFront 缓存行为中,您是否将 Authorization 标头列入白名单以进行转发?默认情况下,CloudFront 会删除大多数标头。
-
嗨@Michael-sqlbot,将授权标头添加到白名单中确实有效。谢谢
-
这个答案也可能有帮助,它帮助了我:stackoverflow.com/a/53804396/728602
在配置 CloudFront 分配时,请记住默认情况下 CloudFront 会从请求中删除大多数标头。
这样做是为了优化缓存命中率,同时防止您的源服务器根据这些标头做出不适合基于这些标头的其他变体(或不存在)的不同请求的决定,然后 CloudFront 将从这些标头提供服务缓存,不恰当。
您需要将 Authorization 标头列入白名单以转发到源。
另请注意,在您控制的 CloudFront 分配后面配置 API Gateway 时,您可能希望将 API 端点部署为区域性而非边缘优化。
- 我可以在 Cloudfront 的哪个位置将 Authorization 标头列入白名单?
-
@Growler,看起来您找到了解决方案。
-
添加 Authorization 似乎不能解决问题。 API 网关 - XXXX.execute-api.region.amazonaws.com/test -(这有效)源域名 - XXXX.execute-api.region.amazonaws.com 源路径 - /test 仍然收到 {"message":"Missing身份验证令牌
-
@RutulPatel 确保您将"错误缓存最小 TTL"设置为 0 以返回 HTTP 状态代码,然后验证您的响应不是来自缓存 - 响应标头应包括 X-Cache: Miss from CloudFront stackoverflow.com/a /35541525/1695906
-
目前它是 X-Cache a?'来自云端的错误
-
我的错误@RutulPatel,"X-Cache:Miss ..."消息可能仅适用于成功响应(HTTP状态代码<400)......但错误缓存最小TTL肯定需要设置为0。你应该如果您还没有,可能会将其作为自己的问题发布。