如何确保来自我的 Elastic Beanstalk REST API 应用程序的 CloudFront returns cookie
How do I ensure CloudFront returns cookies from my Elastic Beanstalk REST API application
我在 AWS Elastic Beanstalk 中部署了一个 Java Spring 用于 REST API 的启动应用程序。它是 HTTP 而不是 HTTPS。
我们称它为http://foobar.elasticbeanstalk.com/api
。
我正在使用 AWS CloudFront 分发来终止 HTTPS,但不缓存任何内容(我已将我的缓存策略设置为“Managed-CachingDisabled”。
我们称它为https://dfoobar123.cloudfront.net
。
有些 API 要求客户端“登录”。有一个调用 /login
导致在响应 cookie 中返回 ACCESS_TOKEN。后续调用必须包含该访问令牌才能成功。
直接上app就可以了。当我转到 http://foobar.elasticbeanstalk.com/api/login(直接使用 Elastic Beanstalk 应用程序)时,服务器让我登录并 returns cookie。
但是,当我转到 CloudFrontDistribution https://dfoobar123.cloudfront.net/api/login 时,我可以看到服务器正在对我进行身份验证,但我没有在响应中取回 cookie headers。
我需要在 CloudFront 中打开什么设置才能启用此功能?
您需要在缓存行为中转发cookie。没有它,CloudFront 将从响应中删除 Set-Cookie header。
You can configure each cache behavior to do one of the following:
...
Don’t forward cookies to your origin – CloudFront doesn’t cache your objects based on cookie sent by the viewer. In addition, CloudFront removes cookies before forwarding requests to your origin, and removes Set-Cookie headers from responses before returning responses to your viewers.
Cookie 被阻止默认
让它们工作需要在行为设置中进行两项更改:
- 允许 cookie 通过(根据请求)
- 让
Set-Cookie
header 返回(带有响应)
在哪里更改 cookie 设置...
迷茫?如果是,那么...
这是 step-by-step 过程...
在您的 CloudFront 分配中:
- 转到行为 选项卡
- Select 行为并单击 编辑
- 找到缓存键和源请求部分
- 在源请求策略下点击创建策略
- 填写 Name,然后滚动到底部并将 Cookies 从 None 更改为 到 All(或 Include Specified Cookes,如果你想列入白名单)
- 点击创建保存新政策
- 切换回原始选项卡(使用 编辑行为 页面)
- 再次找到缓存键和原始请求部分
- 在响应header政策下,点击创建政策
- 填写名称,然后滚动到底部
- 在 自定义 headers 下,点击 添加 header 按钮
- 在名称字段中输入
Set-Cookie
- 将 Value 留空,Origin override 应保持未选中状态
- 点击创建按钮
- 返回编辑行为页面,点击刷新按钮,这样您就可以选择这两个新策略
- 点击保存更改并花几分钟时间进行部署
我在 AWS Elastic Beanstalk 中部署了一个 Java Spring 用于 REST API 的启动应用程序。它是 HTTP 而不是 HTTPS。
我们称它为http://foobar.elasticbeanstalk.com/api
。
我正在使用 AWS CloudFront 分发来终止 HTTPS,但不缓存任何内容(我已将我的缓存策略设置为“Managed-CachingDisabled”。
我们称它为https://dfoobar123.cloudfront.net
。
有些 API 要求客户端“登录”。有一个调用 /login
导致在响应 cookie 中返回 ACCESS_TOKEN。后续调用必须包含该访问令牌才能成功。
直接上app就可以了。当我转到 http://foobar.elasticbeanstalk.com/api/login(直接使用 Elastic Beanstalk 应用程序)时,服务器让我登录并 returns cookie。
但是,当我转到 CloudFrontDistribution https://dfoobar123.cloudfront.net/api/login 时,我可以看到服务器正在对我进行身份验证,但我没有在响应中取回 cookie headers。
我需要在 CloudFront 中打开什么设置才能启用此功能?
您需要在缓存行为中转发cookie。没有它,CloudFront 将从响应中删除 Set-Cookie header。
You can configure each cache behavior to do one of the following:
...
Don’t forward cookies to your origin – CloudFront doesn’t cache your objects based on cookie sent by the viewer. In addition, CloudFront removes cookies before forwarding requests to your origin, and removes Set-Cookie headers from responses before returning responses to your viewers.
Cookie 被阻止默认
让它们工作需要在行为设置中进行两项更改:
- 允许 cookie 通过(根据请求)
- 让
Set-Cookie
header 返回(带有响应)
在哪里更改 cookie 设置...
迷茫?如果是,那么...
这是 step-by-step 过程...
在您的 CloudFront 分配中:
- 转到行为 选项卡
- Select 行为并单击 编辑
- 找到缓存键和源请求部分
- 在源请求策略下点击创建策略
- 填写 Name,然后滚动到底部并将 Cookies 从 None 更改为 到 All(或 Include Specified Cookes,如果你想列入白名单)
- 点击创建保存新政策
- 切换回原始选项卡(使用 编辑行为 页面)
- 再次找到缓存键和原始请求部分
- 在响应header政策下,点击创建政策
- 填写名称,然后滚动到底部
- 在 自定义 headers 下,点击 添加 header 按钮
- 在名称字段中输入
Set-Cookie
- 将 Value 留空,Origin override 应保持未选中状态
- 点击创建按钮
- 返回编辑行为页面,点击刷新按钮,这样您就可以选择这两个新策略
- 点击保存更改并花几分钟时间进行部署