Hashare中的OAuth#

---
创建日期: 2015-07-23
---
本文简单介绍OAuth,Hashare备份时用到的一种技术,并介绍Hashare的隐私处理方式。

我不会用多么专业的术语解释什么是OAuth,也不会诙谐幽默地把OAuth悄悄引出来,因为我也不懂……

扔砖头#

先看看会有哪些需求:

生栗子#

假设某人建了个小破网站(为什么不是我呢?因为我连小破网站都不是,评论系统都没有), 评论需要登入(不过通常个人博客都只是要求留邮箱),或者更高级点的功能,反正就是要注册登入。

我已经厌烦了记账号密码了,需求不是很大,况且还是个小网站,为了保护隐私,就算了。即使注册,哪天就忘了。

另外呢,作为小破网站,我要管理,啊不,是他要负责账号密码的维护。 比如密码修改、找回、发送邮件等等,哪天还被网络攻击,泄露用户信息了,这个也不是好玩的。

要是能用比较知名服务的账号密码登入就好了,比如微软、谷歌、脸书(你以为我会说QQ、百度、新浪么……欸,不对)。 这样爱怎么改密码,丢密码都和他没关系,反正能登入前述网络服务就行。

现在比较常见的使用某某服务登入,选择后会跳转到指定服务的认证界面(这个非常重要,一定要认清网址,否则可能是钓鱼页面),授权后就跳转回去了,发现自己登入了。

炒栗子#

假设我在某知名服务上有些资源,咳咳,不是片……是照片、文件,或者是存储空间。 有些工具软件想要获取它们,比如照片编辑、文件修改,和,Hashare!

我不能把账号密码告诉工具软件让它去取啊, 而是第三方(工具软件)引导你到授权界面:麻烦您告诉老爷(资源服务),您要赏个授权给小的。 然后金主(你)就想了想,说:小弟啊(资源服务),看他挺可怜的,就把我那点东西给他见见世面。 得到授权后,第三方就去向它老爷/你小弟要东西去了。

这背后,在金主来之前,就第三方和资源服务就已经预谋了; 金主授权后,他俩又背地里干了不少勾当……啧啧啧。

反正第三方获得了资源,然后你在第三方那操作了会,愉快的一天过去了。

信息也是一种资源,所以有些工具获取的是你的联系人、社交记录等等。

煮栗子#

其实这个和第二个是差不多的,不同于获取资源,而是在知名服务那发微博这种的。

玉碎了#

抛砖引玉嘛,本来想接着简单却不失详细的介绍OAuth工作流程,基础不扎实,还是算了。

有的介绍中会提好多相关节点:用户、服务提供商、第三方、用户代理、认证服务、资源服务……这里就混着用

第三方先向服务提供商注册,应用的名称、作用、重定向地址、需要权限等等,成功后第三方会得到一个公开密钥和一个私有密钥。

用户使用第三方工具,需要授权时,第三方引导跳转至服务提供商授权界面,附加上重定向地址、公开密钥等信息。 服务提供商验证这些信息符合,并询问用户是否授权。

用户思(sha)索(bu)再(la)三(ji)授权后,服务提供商在自己那记录下:半柱香后,有只泼猴来访……然后让用户浏览器跳转到第三方页面,并附加些验证信息。

浏览器再请求第三方页面时,就把服务提供商附加的信息告诉了第三方,此时浏览器在等待第三方页面回复,用户什么也没看到,除了加载中的圈圈。

第三方服务端通过浏览器的传话,在用户等待的时候,把自己的私有密钥和验证信息加工,向服务提供商发送,服务提供商收到后把自己知道的信息(当然知道私有密钥)同样加工核对,“泼猴,你果然来了”,再把访问令牌返回给第三方服务端。

第三方服务端用访问令牌再向服务提供商的资源服务部门请求资源,获得后,处理处理,把内容返回给用户浏览器。上述过程中,用户一直在等待。

用户睡了一觉后(其实很快的),看到第三方页面显示内容,于是操作了一会,愉快的一天过去了。

有个问题,为什么需要访问令牌,而不是直接在访问令牌那个时候请求资源?

访问令牌的有效时间如果很长,那当用户已经不在操作第三方工具,第三方服务端还是可以通过访问令牌获取用户资源。不可怕吗? 如果有效期是十年呢?曾经授权不担心信息被第三方获取,并不意味着以后的信息也不担心被获取。

另外还有一个很重要的问题:权限。 有些第三方申请授权时,超出其所需范围,用户并没意识到。 也有些服务提供商最基础权限也包含很多隐私信息,非常可怕。

瓦在哪#

Hashare的备份,是在获得用户授权后,将浏览器中的Tables存储到用户网盘中。 需要时再从网盘下载,添加到浏览器中。

作为一个可离线网页应用,除了静态文件,根本就没有服务端需求,没有必要在服务端请求资源,再返回给用户,称为“Implicit Grant”,幸运的,OneDrive支持这种方式。

所以Hashare的方式就是,授权后跳转回,并附加上令牌,浏览器再使用令牌直接请求资源,途中没有服务端什么事。 令牌的访问有效时长为一小时,而且权限只有“应用 - Hashare”文件夹的访问权,根本无法访问其它文件,因为Hashare不需要。

这个并不是绝对安全的,如果有人在一小时内,也使用了你的令牌,毕竟这是明文写在网址中的。

瓦塌了#

再说说所谓“无奈”的事,我难道不想多支持一些网盘吗? 360、金山、百度、微云……有些没找到API文档,有些文档看着就像没更新,有些申请权限到现在估计都没下来,有些验证方式令人不齿。 我就要个应用文件夹的权限有什么难的?

某些服务商,估计是看不起这种小应用,早年文档完全是废的,出了些什么组合套装……并不是我们抵触国内商家,但是OneDrive确实对这些基础功能提供良好。

Google的因为你懂的原因,所以我没加。 亚马逊因为另一些原因没有加入。结果就暂时只有OneDrive在。


我不太确定我说清楚了没有,也不确定其中是不是有错误,凑合凑合看吧。

我比较在意隐私问题,所以我强调Hashare的处理方式。 (“WP用户没有什么玩的,就只好关心关心隐私。” - 网友)

关于OAuth的一篇文章,请访问阮一峰的:理解OAuth 2.0