CloudFront 签名 URL 破坏客户端缓存

CloudFront signed URLs break client caching

我计划使用 CloudFront 作为我网站的服务器缓存,由 singed URLs 保护。使用签名 URLs 的原因是只允许经过身份验证的用户访问内容。

然而,我的网络应用程序也需要在客户端使用缓存。现在,由于已签名的 URL 只会在短时间内有效,然后会生成一个新的,这将破坏客户端的缓存。虽然客户端会收到相同的资源,但它会有一个新的签名URL,客户端浏览器将无法从缓存中获取它。

我想对长期存在的资源使用具有短期有效期的签名 URL 的原因之一是可以控制传输的数据。在最好的情况下,这些资源缓存在客户端。如果没有,它们将缓存在 CloudFront 上,CF 将传送它们并节省我的 Web 应用程序服务器的资源。但是我想防止攻击者从 CF 中大量下载资源并给我带来额外的成本。

有没有办法使用签名 URLs 以外的其他方式来保护对 CloudFront 资源的访问?例如,一件好事就是签名的 cookie。客户端会在 webapp URL 上请求资源,而 webapp 会 return 重定向到该资源的长期 CF URL 但检索资源只能通过具有短期有效期的签名 cookie。客户端仍会看到长 URL 并可以缓存资源,但资源只能在短时间内用于下载。 我不想弄乱 IP 地址,因为它们不可靠,通常一个 IP 后面可能有很多用户等等。

是否有类似的东西可以克服已签名 URL 的本地缓存限制?

如果资源中没有真正机密的内容,我可能不会费心亲自签名。但是既然你有这个要求,你可以使用 signed cookies.

这些既可以限制时间,也可以限制范围。因此,您可以授予对 at 特定 URL 子集的访问权限。