身份验证——谈谈OpenID

来源:互联网 发布:电话网络系统 编辑:程序博客网 时间:2024/05/18 19:44

说明:此为06年11月写的旧文,还没在CSDN发过,补发一下。


听说今年的网志年会上有一个讨论OpenID的专题。对于网站的身份验证问题不算一个新话题,自从当年MS推出并热炒passport的时候就已经开始了。即使是OpenID也出来有一阵子了。

不过我是看了前一段ZOLA对OpenID的大力推广之后,才开始去了解这个技术。虽然OpenID有自己很大的优势,但同样存在着一些目前不可克服的困难。

首先简单地把目前的身份验证手段分为三类:

1、集成验证。就是现在大多数网站所采用的方式,你要在这个网站访问,就要在这个网站注册一个用户,并且以这个用户身份登录。

2、第三方验证。如MS的Passport。服务提供网站不记录用户身份,而是通过向第三方(如MS)提请验证用户的身份。

3、分布式验证。以OpenID为例,它的验证过程要麻烦一些:用户以一个URL作为身份标识,这个URL所指向的页面包含了用户所选择的验证服务器(YADIS),当用户以这个URL登录服务提供网站时,网站从这个URL取得YADIS信息,然后转向YADIS网站,用户在YADIS网站输入密码以确认身份后,最后反馈到最初的服务提供网站。

第一类验证的优点是简单方便,并且对于网站来说,可以独占用户资源。但缺点也是很明显的:对于用户来说,要记住自己在每个网站上的用户名和密码并不是一件容易的事——因为难免碰到用户名重复的情况而不得不改变自己的用户名,或是不放心网站的用户资料管理而在不同网站用不同的密码。

第二类验证提供了一个统一的验证渠道,对于用户来说方便很多,而且由MS这样的大公司提供验证服务也感觉比较有保障。但对于网站来说就损失了自己的用户资源,特别是当这些网站与MS存在竞争的可能性时,他们就更加不愿意了。而且还有一个潜在的风险就是,一但这个第三方验证失效(比如GFW),也会受到连带的影响。

于是OpenID横空出世。用户可以自由选择YADIS服务器来记录自己的身份信息,有条件的用户甚至可以自己建立一个,避免了第三方集中验证存在的失效风险。此外分布的验证机制避免了大公司的垄断,对于网站来说也会感觉好一些。而且对于用户来说,到哪都可以用自己唯一的URL,不存在用户名被占用的问题。

貌似OpenID是最好的解决方案?

但我认为,这只是看上去很美。

首先,从使用方便性上看,URL通常太长了,除非用户拥有自己的域名,否则使用BLOG或个人主页之类的东东通常都太长了一点。而且输入URL以后还需要转到YADIS上去输入密码(当然网站也可以实现成一步完成,由网站到YADIS上去验证,但存在风险,见《安全支付》),这也是比较麻烦的。

其次,第一类验证可以在网站上完成,不需要多余的Round-trip,响应速度最快;第二类需要到第三方验证网站转一圈,会慢一点;而OpenID需要到用户URL和YADIS上各转一圈,响应速度最慢。

第三,绝大部分用户是不可能自己建立YADIS的,所以结果还是要交给第三方YADIS做验证,还是不可避免出现与第二类相似的集中情况。相当大部分用户甚至连BLOG和个人主页都没有,所以还不得不在如MyOpenID这样的网站上注册一下,取得一个OpenID专用的URL,结果就与第二类验证没什么区别了。

第四,从安全性考虑,OpenID使用的YADIS可以由用户自己选择,而各YADIS在安全性方面存在良莠不齐的情况,用户的资料安全风险还是比较大的。

第五,可靠性差。表面上OpenID将验证过程分布到很多的YADIS上,似乎会比较安全,但实际上除非用户自己能够在URL页面上作YADIS的容错备份(在页面上做几个YADIS的链接,这只是我的想法,至于OpenID是否支持这样做,我还没有找到进一步的资料),否则一旦用户所选择的YADIS失效,则用户就无法正常使用了。而最大的风险还在于用户URL页面可能失效。

从验证失效的风险上来看:

第一类验证如果失效,只是那个网站无法访问,不会影响到用户访问其它的网站。假设网站的可靠性为N(N为小于1的数,比如99%),则总的可靠性也为N。

第二类验证如果失效,则用户所有依赖这个验证的访问都将失败,但就某一个网站来说,其总可靠性为N*A(A为验证网站的可靠性,比如99.99%),比第一类的可靠性要低一些。当然因为这类验证网站都是由大公司提供,可靠性通常会很高,所以与第一类的可靠性差别可以忽略。

而对于OpenID来说,用户URL和YADIS之间,只要有一个失效,则用户的相关访问都将无法进行。以单个网站来说,其总可靠性为N*U*Y(U和Y分别是用户URL页面和YADIS的可靠性),如果是用mblogger的页面来做URL的话,假设其可靠性为80%,而所用的YADIS可靠性为95%,则总可靠性将大幅下降到:76%。当然这是一个极端的例子,我想不会有人拿mblogger这种靠不住的页面来做自己的OpenIDURL的,而且一般的YADIS可靠性应该也不致于这么低(但也还是不如MS的passport)。

但总的来说OpenID的失效风险还是要远大于前两类验证的。

基本上在我看来,OpenID在解决了前两类验证方式的缺点的同时,也带来很多的问题。

附加说明:本来我还以为GoogleAccount是一种类似于Passport的第三方验证手段,但是经过几天的研究后发现,它只提供了对部分Google服务的帐户访问功能,拒绝对第三方提供用户身份验证服务,这实在是一件很遗憾的事情,否则Google Account应该会是比OpenID更好的选择。
原创粉丝点击