【发布时间】:2018-03-08 20:23:02
【问题描述】:
在 CloudFront 配置中设置 cookie(子域到父域)时遇到问题:
- S3 存储桶为具有 CloudFront 分配的静态站点提供服务。别名:
example.com - 具有自定义域的 API 网关 API:
api.example.com - 具有 CloudFront 分配且 CNAME 的 S3 存储桶:
files.example.com
example.com 上的 Web 应用程序联系 api.example.com 上的 lambda 代理 GET 方法。除其他外,此函数返回具有由AWS.CloudFront.Signer.getSignedCookies() 生成的值的标头
{
'Set-Cookie': `CloudFront-Expires=...; Domain=.example.com`,
'SEt-Cookie': `CloudFront-Signature=...; Domain=.example.com`,
'SET-Cookie': `CloudFront-Key-Pair-Id=...; Domain=.example.com`
}
这些正在与响应一起发送到客户端,但由于某种原因,它们没有在 GET 请求中发送到files.example.com 上的 S3 存储桶。
我不确定问题在于 cookie 是 set 还是 sent:通过查看 chrome 开发工具中的应用程序选项卡,似乎 cookie 是不在那里。但是,在网络选项卡中,cookie 确实与对api.example.com 的请求一起发送(但不是与对files.example.com 的请求一起发送)。
据我所知,配置应该根据域 cookie 策略工作(子域正在尝试使用父域设置 cookie,在父域下是父域的不同子域,应该接收 cookie)。这种行为还有其他直接嫌疑人吗?
【问题讨论】:
-
当您说它们没有在 GET 请求中发送到 S3 存储桶时,您究竟是什么意思?它们被发送到 CloudFront 源并且它没有转发 cookie?这些信息的来源是什么?
-
要明确一点:Q1:
Set-Cookies 是作为响应标头出现还是作为 GET 方法返回的响应正文的一部分出现? Q2:您为getSignedCookie()选项指定了什么url或policy? -
@SteveBuzonas 我正在检查通过 chrome devtools 中的网络选项卡发送的请求。 cookie 未附加到对 API 的 GET 请求。 @KhalidT。 cookie 显示为响应标头。我指定的网址是
files.example.com/*
标签: amazon-web-services cookies amazon-cloudfront