首页 > 使用第三方存储,怎么不进行自己服务器中转就能进行权限控制?

使用第三方存储,怎么不进行自己服务器中转就能进行权限控制?

我们目前有一个系统使用的是第三方的云存储,存储的信息有一些是私有文件,只有对应的登陆用户情况下才能访问。我们现在采用的办法是前端给一个url,比如a.com/dealer/1/1.jpg,然后后端对访问这个url的用户鉴权,如果这个用户可以访问,就去第三方的存储上获取到这个1.jpg然后返回给用户,这样的缺点就是必须通过我们的服务器进行中转,速度比较慢。

因为云存储已经设置为了私有空间,所以也不能采用什么临时url之类的办法了~

大家有什么好的办法么?谢谢啦~


update

开始为了避免有广告的嫌疑没有说使用的是什么云存储,现在说出来吧,是又拍云,但是现在已经改用了阿里云的oss了。使用的就是一次性的下载链接,具体原理可以看http://developer.qiniu.com/docs/v6/api/reference/security/download-token.html,阿里云的文档比较简单。

如果又拍云也有这个功能,请下面的同学给我说一下~谢啦~


我觉得最理想的的设计是这样:后端在鉴权之后,向云存储申请一个「下载凭证」,就是一个 Token, 一次性的,发给前端。然后前端用这个下载凭证去云存储下载该文件,这样流量就不需要经过后端转发了。

然后我查了一下,似乎七牛也是支持这样做的:http://developer.qiniu.com/docs/v6/api/reference/security/download-token.html


@管理猿 希望SF踩的同时强制要求填写理由,否则被踩得不明不白,有点呵呵!

文件系统是否可以这样设计,

将文件划分为不同权限级别的目录,
用户登录后,后端直接给前端返回用户可以访问的文件列表,
这样就不用经过中转就直接访问云端上的文件!


从你的描述来看,你应该使用的就是七牛的云存储,根据我对七牛的理解,应该可以使用下面的策略:
1. 直接给符合访问条件的用户把下载凭证提供给用户,让用户直接带凭证去访问,而不要让你的服务器先去获取图片,再将图片返回给用户;
2. 可以把某个用户能够访问的资源都加上独一无二的前缀,譬如UiD/a.com/dealer/1/1.jpg,让用户直接去访问他自己Uid前缀下的资源就可以了,这样就能免去你的服务器先做一次判断才能返回资源,但是这样做的缺点是,需要把用户能访问的资源都copy一份。


好好看下第三方文档咯,现在典型的S3存储都支持这个功能,你使用的错误的地方在于你代理了下载的数据流,这个应该只需要由客户端向第三方存储server去请求。
鉴权肯定是由业务侧的服务端来做(当然也可以把各种私钥配置在客户端,由客户端进行token的计算,不过有点作死),业务server会有第三方例如七牛云存储、阿里云OSS等下发的公钥和私钥,利用对称加密对需要访问的URL资源授权一个签名,具体的签名算法大同小异,都是从AWS抄过来的,仔细看下文档或者直接用各家提供的SDK,然后把这个授权下发给客户端,客户端直接请求第三方服务器下载资源即可。

【热门文章】
【热门文章】