【问题标题】:Signed cookies between subdomains on CloudFrontCloudFront 上子域之间的签名 cookie
【发布时间】:2018-03-08 20:23:02
【问题描述】:

在 CloudFront 配置中设置 cookie(子域到父域)时遇到问题:

  1. S3 存储桶为具有 CloudFront 分配的静态站点提供服务。别名:example.com
  2. 具有自定义域的 API 网关 API:api.example.com
  3. 具有 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() 选项指定了什么urlpolicy
  • @SteveBuzonas 我正在检查通过 chrome devtools 中的网络选项卡发送的请求。 cookie 未附加到对 API 的 GET 请求。 @KhalidT。 cookie 显示为响应标头。我指定的网址是files.example.com/*

标签: amazon-web-services cookies amazon-cloudfront


【解决方案1】:

您想使用 cookie 域 .example.com 而不是 example.com。前导的. 也允许子域访问 cookie。

您还需要确保在您的 CloudFront 行为中将 cookie 转发到源。

【讨论】:

  • 你说得对,. 缺少 domain 属性。不幸的是,行为没有变化,所以我只是将其添加到问题中。
  • 所有现代浏览器都遵循更新的规范RFC 6265,并且会忽略任何前导点,
  • @blueCat 你有显示浏览器接受的来源吗?兼容性测试工具表明被广泛接受,但不是全部。
猜你喜欢
  • 1970-01-01
  • 2019-04-24
  • 2015-06-05
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
相关资源
最近更新 更多