什么是限制用户访问其他用户的最优雅的方式'内容?

时间:2016-12-22 16:33:53

标签: node.js amazon-web-services nginx amazon-s3 private

我必须构建一个项目,用户将登录并上传一些图像和视频,并且上传的文件应该只有上传者或网站管理员才能看到。

我是主要的Node.js,所以我尝试使用快速中间件来限制用户的媒体文件,但我注意到这不是处理这个问题的最佳方式,因为快递不是善于渲染静态内容。

以下是我在一些谷歌会议之后可以想到的一些选项

  • Amazon S3存储桶,其中每个用户都有自己的文件夹/权限和文件没有(但是当我们有网址时文件真的是私有的)
  • 使用来自S3存储桶的预先签名的网址生成文件的临时网址(该文件将公开20分钟,我不想要这个)
  • 限制对Nginx的访问(再次,我不知道Nginx是否可以访问数据库并验证它获得的请求)
  • 将GridFS与mongoDB一起使用? (我可能不会使用它,但想知道这是否可以解决方案)

有没有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

最优雅的方式是礼貌地要求他们不要访问其他人的内容。

我不确定这是最有效的方式。

但是,严肃的说,我建议将express.static中间件与Passport或其他东西一起使用来实现身份验证和权限。你不是"渲染"这里有任何静态内容。您只是直接从磁盘传输文件。

答案 1 :(得分:1)

每个用户都有一个唯一的ID,其中内容(文件和视频等)部分由此ID引用,以便客户只能访问其ID内容

用户登录,nodejs将该用户与从mongodb检索到的唯一ID配对。无需将其卸载到nginx。存放内容的位置与此逻辑无关。可以是本地文件系统,mongo,S3等......

避免将用户名或ID放入任何URL,其冗余服务器在内部维护此知识。无需弄乱URL。例如,当我与我的私人内容交互时,Amazon AWS拥有此URL

https://console.aws.amazon.com/route53/home?#resource-record-sets:ZAHKXPA7IKZ8W

看到它只显示我的用户名资源所特有的内容ID。目标是尽量减少URL中的混乱。

或者,在共享资源的世界中​​,例如闪烁,此处URL确实提供用户名和资源ID https://www.flickr.com/photos/okinawa-soba/31419099190/in/photostream/在您的情况下,即使有人拿起另一个内容的URL,服务器也必须拒绝,因为它不是被授权捣毁另一个人的内容