限制访问amazon s3文件,仅允许登录用户访问

vir*_*epo 4 php amazon-s3 amazon-web-services

当我转到我的存储桶文件的URL时,它会立即下载.但是,我只希望登录到我的应用程序的用户可以访问这些文件.

我一直在搜索几个小时,但无法从我的应用程序中找到如何在PHP中执行此操作.我正在使用laravel来执行此操作,因此代码可能看起来不熟悉.但实质上它只是生成我的存储桶文件的URL,然后重定向到下载它的链接

$url = Storage::url('Shoots/2016/06/first video shoot/videos/high.mp4');
return redirect($url);
Run Code Online (Sandbox Code Playgroud)

如何才能使登录到我的应用程序的用户可以访问此文件?

Jef*_*ell 10

对于我正在处理的应用程序,我们遇到了类似的问题.我们最终使用的解决方案是生成S3签名的URL,它们的到期时间很短.这允许我们生成一个新的签名链接,其中包含对Web服务器的每个请求,将该链接传递给我们已知的auth'd用户,然后用户可以在非常有限的时间内访问(几秒钟).对于我们希望在DOM中显示的图像,我们的API使用HTTP 303(请参阅其他)标头和签名的URL进行响应,该URL在几秒钟内过期.这允许浏览器下载图像并在链接过期之前显示它.

围绕此解决方案存在两个风险:我们知道用户可能会在过期以编程方式请求签名的URL并与其他服务共享,或者正在拦截网络流量的未授权用户可能会拦截请求并进行制作它本身,我们认为这些是足够的边缘情况,我们对我们的解决方案感到满意.