如何确保 CloudFront 从我的 Elastic Beanstalk REST API 应用程序返回 cookie

Vih*_*ung 1 cookies amazon-cloudfront amazon-elastic-beanstalk

我有一个用于部署在 AWS Elastic Beanstalk 中的 REST API 的 Java Spring Boot 应用程序。它是 HTTP 而不是 HTTPS。

我们就这样称呼它吧http://foobar.elasticbeanstalk.com/api

我正在使用 AWS CloudFront 发行版来终止 HTTPS,但不缓存任何内容(我已将缓存策略设置为“Managed-CachingDisabled”。

我们就这样称呼它吧https://dfoobar123.cloudfront.net

有些 API 需要客户端“登录”。有一个调用/login会导致响应 cookie 中返回 ACCESS_TOKEN。后续调用必须包含该访问令牌才能成功。

直接上app就OK了。当我访问http://foobar.elasticbeanstalk.com/api/login(直接使用 Elastic Beanstalk 应用程序)时,服务器会让我登录并返回 cookie。

但是,当我转到 CloudFrontDistribution https://dfoobar123.cloudfront.net/api/login时,我可以看到服务器对我进行身份验证,但我没有在响应标头中取回 cookie。

我需要在 CloudFront 中打开什么设置才能启用此功能?

two*_*ool 10

默认情况下会阻止 Cookie

要使它们发挥作用,需要在行为设置中进行两项更改:

  1. 允许cookies通过(根据请求)
  2. Set-Cookie标头返回(与响应一起)

在哪里更改 cookie 设置...

cookie 的 cloudfront ui

使困惑?如果是这样,那么……

这是分步过程...

在您的 CloudFront 分配中:

  1. 转到行为选项卡
  2. 选择行为并单击编辑
  3. 找到缓存键和源请求部分
  4. 在“源请求策略”下,单击“创建策略”
  5. 填写Name,然后滚动到底部并将CookiesNone更改为All(或者Include Specified Cookes,如果您想将其列入白名单)
  6. 点击“创建”以保存新策略
  7. 切换回原始选项卡(带有“编辑行为”页面)
  8. 再次找到Cache key和origin requests部分
  9. 在响应标头策略下,点击创建策略
  10. 填写名称,然后滚动到底部
  11. “自定义标题”下,点击“添加标题”按钮
  12. 名称字段中输入Set-Cookie
  13. Value留空,并且Origin override应保持未选中状态
  14. 点击创建按钮
  15. 返回“编辑行为”页面,点击刷新按钮,这样您就可以选择这两个新策略
  16. 点击“保存更改”并给它几分钟的时间来部署