Laravel 5.1 通过 Restful API 访问 S3 安全映像

Laravel 5.1 S3 Secure Image access via Restful API

我在 Laravel 5.1 上对 Restful API 使用基于令牌的身份验证。我使用 S3 作为文件存储来上传用户特定的图像。我想将访问权限限制为仅上传图片的用户。他们应该能够在手机 API 中查看图像。有没有办法在不创建 S3 目录 public 的情况下使用 Laravel 5.1 和 S3 做到这一点?

您无法直接通过请求者和 S3 执行此操作,但您可以将 S3 客户端 SDK 合并到充当中间人的 Laravel 项目中。

您的 Laravel 项目将有一个 API 可以接收获取资源的请求,并且需要进行身份验证和授权。 这还需要从 user_ids 到用户有权访问的资源列表 URLs/names 的映射。像 DynamoDB 这样的东西就可以了。

如果成功,您可以执行以下两项操作之一:

  1. 获取对象并return直接给请求者,这可能是最安全和最简单的。

  2. 得到一个 Signed URL (http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html),这样请求者就可以单独获取资源了。这对于视频等大型对象很有用,但任何有权访问中间 URL 的人(例如代理服务器)也可以访问该资源。