我是亚马逊s3和cloudfront的新手。我的任务是将对象上传到我的存储桶并将cloudfront url发送到电子邮件。 Sofar我已成功上传和下载部分。对于下载,我的网址看起来像是“// cloudfront-domain / object-name”。我希望它看起来有点复杂。我已经通过文档说它我可以添加日期到期,它也将基于64的json策略,两者都将在url中可用。 因此,当我通过java应用程序上传对象时,我想为其设置策略并获取签名的URL。 如果您有样品代码,请分享。 感谢。
答案 0 :(得分:1)
所以当我上传对象
时
有些人误解了这个...服务不提供签名的URL。您没有将它们视为“上传”对象。签名URL由您的代码生成,在生成签名URL时不与服务进行交互。
您通常会在呈现已签名URL的页面的同时生成签名URL,而不仅仅是一次,例如上传对象时。后者是可能的,但签名的URL具有有限的生命周期,并在您旋转签名密钥时变为无效。
以下是签名网址背后的理论。
浏览器发出请求。该服务检查策略文档以验证请求的参数是否与策略允许的实际匹配,然后根据策略文档验证签名,以查看是否有权遵守策略。对于给定的策略文档,只有一个可能的正确签名,因此服务生成应该伴随请求的签名,以查看它是否匹配。如果是,则允许操作。由于篡改策略会更改正确的签名,因此签名的URL不会被篡改。
documentation解释了签名网址的工作原理,并提供了如何生成这些网址的示例。实际上,您可以根据需要编写自己的代码,因为整个签名过程都已记录在案。
请注意,如果您使用//dxxxexample.cloudfront.net/...
而非https://dxxxexample.cloudfront.net/...
形式的链接,则需要生成签名网址以期望http*://dxxxexample...
而不是http://...
或https://...
因为否则,相同的签名网址对HTTP和HTTPS都无效。