如何在java中获取签名的URL?

时间:2017-02-01 10:12:53

标签: java amazon-web-services amazon-s3 amazon-cloudfront

我是亚马逊s3和cloudfront的新手。我的任务是将对象上传到我的存储桶并将cloudfront url发送到电子邮件。 Sofar我已成功上传和下载部分。对于下载,我的网址看起来像是“// cloudfront-domain / object-name”。我希望它看起来有点复杂。我已经通过文档说它我可以添加日期到期,它也将基于64的json策略,两者都将在url中可用。 因此,当我通过java应用程序上传对象时,我想为其设置策略并获取签名的URL。 如果您有样品代码,请分享。 感谢。

1 个答案:

答案 0 :(得分:1)

  

所以当我上传对象

有些人误解了这个...服务不提供签名的URL。您没有将它们视为“上传”对象。签名URL由您的代码生成,在生成签名URL时不与服务进行交互。

您通常会在呈现已签名URL的页面的同时生成签名URL,而不仅仅是一次,例如上传对象时。后者是可能的,但签名的URL具有有限的生命周期,并在您旋转签名密钥时变为无效。

以下是签名网址背后的理论。

浏览器发出请求。该服务检查策略文档以验证请求的参数是否与策略允许的实际匹配,然后根据策略文档验证签名,以查看是否有权遵守策略。对于给定的策略文档,只有一个可能的正确签名,因此服务生成应该伴随请求的签名,以查看它是否匹配。如果是,则允许操作。由于篡改策略会更改正确的签名,因此签名的URL不会被篡改。

documentation解释了签名网址的工作原理,并提供了如何生成这些网址的示例。实际上,您可以根据需要编写自己的代码,因为整个签名过程都已记录在案。

请注意,如果您使用//dxxxexample.cloudfront.net/...而非https://dxxxexample.cloudfront.net/...形式的链接,则需要生成签名网址以期望http*://dxxxexample...而不是http://...https://...因为否则,相同的签名网址对HTTP和HTTPS都无效。