Amazon web services CloudFront上子域之间的签名Cookie
在CloudFront配置中设置cookie(子域到父域)时遇到问题:Amazon web services CloudFront上子域之间的签名Cookie,amazon-web-services,cookies,amazon-cloudfront,Amazon Web Services,Cookies,Amazon Cloudfront,在CloudFront配置中设置cookie(子域到父域)时遇到问题: S3 bucket使用CloudFront分发服务于静态站点。CNAME:example.com 带有自定义域的API网关API:API.example.com 带有CloudFront发行版的S3 bucket,其中包含CNAME:files.example.com example.com上的web应用程序联系api.example.com上的lambda代理获取方法。此函数除其他外,还返回带有由AWS.CloudFron
example.com
API.example.com
files.example.com
example.com
上的web应用程序联系api.example.com
上的lambda代理获取方法。此函数除其他外,还返回带有由AWS.CloudFront.Signer.getSignedCookies()生成的值的标题。
这些将与响应一起发送到客户端,但由于某些原因,GET请求不会发送到files.example.com
上的S3存储桶
我不确定问题是在于cookie的设置还是发送:通过查看chrome开发工具中的应用程序选项卡,似乎cookie不在那里。但是,在“网络”选项卡中,Cookie确实与请求一起发送到api.example.com
(但与请求一起发送到files.example.com
)
据我所知,根据域cookie策略,配置应该可以工作(子域正在尝试设置一个具有父域的cookie,该父域下是父域的另一个子域,应该接收cookie)。这种行为还有其他直接的嫌疑犯吗 您想使用cookie域
.example.com
而不是example.com
。前导的
也允许子域访问cookie
您还需要确保Cookie在CloudFront行为中被转发到源站。您完全正确,域属性中缺少
。不幸的是,行为没有改变,所以我只是将其添加到问题中。所有现代浏览器都尊重较新的规范,并且会忽略任何前导点,@blueCat您是否有显示浏览器可接受性的来源?兼容性测试工具表示广泛接受,但不是全部接受。当您说它们没有在GET请求中发送到S3存储桶时,您的确切意思是什么?它们正在被发送到CloudFront原点,而它没有转发cookies?此信息的来源是什么?需要澄清的是:Q1:Set Cookie
s是否显示为响应头或从GET方法返回的响应体的一部分?问题2:您为getSignedCookie()
选项指定了什么url
或policy
?@SteveBuzonas我正在检查通过chrome devtools中的网络选项卡发送的请求。Cookie未附加到API的GET请求@卡利德。Cookie显示为响应标题。我指定的URL是files.example.com/*
{
'Set-Cookie': `CloudFront-Expires=...; Domain=.example.com`,
'SEt-Cookie': `CloudFront-Signature=...; Domain=.example.com`,
'SET-Cookie': `CloudFront-Key-Pair-Id=...; Domain=.example.com`
}