如何使用Amazon S3创建一次性下载链接?

时间:2013-10-19 15:03:56

标签: php jquery http amazon-web-services amazon-s3

我想创建一个亚马逊s3托管文件的一次性下载链接。文件下载后,此链接将过期。

我希望此文件仍然可以托管,但访问者只能下载一次该文件。

我需要的方案是:我有一个文件下载网站,用户可以为文件付费。我希望用户只能从网站(和亚马逊s3)下载文件一次,我也不希望用户能够与其他人共享直接下载链接。

如果无法做到这一点,我想知道如果可能的话,用IP地址或Cookie来限制它是否更有效?

3 个答案:

答案 0 :(得分:14)

无法告诉S3允许链接仅使用一次。但是您可以创建一个只能在指定时间之前使用的链接。我所做的是将请求者重定向到几分钟内到期的S3链接,因此他或她没有时间分享它。只要浏览器有时间接收重定向响应并遵循它,您就可以将到期时间设置得非常短,甚至几秒钟。

答案 1 :(得分:3)

你可以写一个"一次性网址生成器"服务(以网站或其他API的形式)并使用aws联合用户功能来实现这一目标。

请考虑以下程序:

  • 当用户想要一次性网址时,他们会将请求发送给您的网站 时间网址生成器"服务。
  • 您的服务会生成一次"一次性网址"并将其返回给用户。 url是与用户想要的S3资源的一对一映射。
  • 当用户向"一次url"发出请求时,该服务使用AWS联合用户功能创建临时用户,并代表临时用户生成S3预先签名的URL。
  • 服务将响应发送回用户,重定向到预先签名的URL。
  • 用户遵循重定向,并开始下载文件。
  • 然后该服务删除临时用户。 (或让它过期。)

答案 2 :(得分:0)

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateCFSignatureCodeAndExamples.html

使用已签名的网址。只有此用户才能使用此URL。它还依赖于AWS​​ SDK