说明:此为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这种靠不住的页面来做自己的OpenID
URL的,而且一般的YADIS可靠性应该也不致于这么低(但也还是不如MS的passport)。
但总的来说OpenID的失效风险还是要远大于前两类验证的。
基本上在我看来,OpenID在解决了前两类验证方式的缺点的同时,也带来很多的问题。
附
加说明:本来我还以为Google
Account是一种类似于Passport的第三方验证手段,但是经过几天的研究后发现,它只提供了对部分Google服务的帐户访问功能,拒绝对第三
方提供用户身份验证服务,这实在是一件很遗憾的事情,否则Google Account应该会是比OpenID更好的选择。
分享到:
相关推荐
4. OAuth和OpenID Connect:现代Web应用常用的第三方身份验证协议,允许用户通过第三方服务(如Google、Facebook等)进行身份验证。 二、Forms身份验证 Forms身份验证是Web开发中最常用的机制,尤其在ASP.NET中。...
**OpenID 与 ASP.NET MVC 表单身份验证结合使用** OpenID 是一种开放的身份验证协议,它允许用户使用一个中央身份提供者(Identity Provider,IDP)来登录多个网站,而无需为每个网站创建单独的账户。在 ASP.NET ...
OpenID是一种开放标准的身份验证协议,它允许用户在不共享个人信息的情况下,通过第三方服务提供商验证其身份。在Java环境中,JOpenID是一个流行的OpenID客户端库,它为开发者提供了实现OpenID身份验证的便利工具。...
允许WordPress提供和使用OpenID来对用户和评论进行身份验证。 描述 OpenID是一种,使用户无需创建新密码即可向网站进行身份验证。 该插件允许用户使用OpenID登录到其本地WordPress帐户,并允许评论者使用OpenID留下...
OpenID是一种开放的身份验证...通过学习这些资源,开发者不仅可以理解OpenID的基本工作流程,还能掌握如何在Java环境中使用openid4java库实现OpenID的身份验证服务,从而提升其在身份管理和安全认证方面的专业技能。
6. **Passport身份验证**:Microsoft的老式身份验证服务,现已被其他方式取代,如OAuth或OpenID Connect。 7. **表单身份验证**:最常见的身份验证方式,允许自定义登录页面,用户信息存储在数据库中,可配合各种...
Java的OpenID服务器JOIDS(Java OpenID Server)是一个基于Java开发的身份验证解决方案,它实现了OpenID协议,允许用户在不共享个人详细信息的情况下,在不同的网站之间进行身份验证。OpenID是一种分散式身份验证...
_OpenID 在 Java Web 应用程序中的应用 在当今数字时代,身份验证是 Web 应用程序中最为...开发者可以使用 openid4java 库来实现 OpenID 身份验证,并与其他身份验证机制集成,以提供更加灵活和安全的身份验证机制。
OpenID身份验证规范定义了OpenID认证的过程,包括身份验证请求、认证响应和错误处理。OpenID提供商负责提供OpenID身份验证服务,例如myOpenID。OpenID库则提供了实现OpenID认证规范的实现,例如openid4java。 在...
plone.app.openid-2.1.0是一个专门针对OpenID身份验证的Python库,它为Plone内容管理系统提供集成OpenID身份验证的支持。本文将深入探讨这个库的细节,以及它如何在实际开发中发挥作用。 首先,OpenID是一种开放的...
OpenID 的主要作用在于简化身份验证过程,减轻用户的记忆负担,并且提高了安全级别,因为用户的登录信息只存储在他们选择的OpenID提供者那里,而不是分散在各个使用OpenID的网站。 3. **OpenID是什么** OpenID ...
ASP.NET提供了多种身份验证模式,包括Windows身份验证、Forms身份验证、Passport身份验证(已弃用)和基于OAuth或OpenID Connect的现代身份验证。在大多数Web应用中,Forms身份验证是最常用的方法,因为它允许非...
4. **响应**:如果身份验证成功,OpenID 提供商会向应用程序发送一个包含身份验证结果的消息。 5. **完成登录**:应用程序根据收到的信息决定是否允许用户登录。 ### 示例代码解析 接下来,我们详细分析提供的代码...
这个教程将深入探讨如何将OpenID集成到您的项目中,帮助您为用户提供更加方便、安全的身份验证体验。 一、OpenID基础 1. **OpenID原理**:OpenID的核心思想是用户拥有自己的身份URL(Uniform Resource Identifier...
它处理了与OpenID服务器之间的通信,包括发现、身份验证请求和响应的解析。 2. **灵活性**:PHP OpenID库不仅支持OpenID 2.0标准,还兼容早期的1.1版本。此外,它提供了多种配置选项,以适应各种应用场景。 3. **...
为了简化登录过程并提高用户体验,**OpenID**作为一种开放标准的身份验证协议,允许用户使用单一的凭证(即OpenID)访问多个网站和服务。这不仅为用户提供便利,还为网站管理者减轻了维护用户账号系统的负担。 ####...
- **OpenID终点URL(OP Endpoint URL)**:OpenID提供者的URL地址,用于进行身份验证。 - **OP标识(OP Identifier)**:由OpenID提供者分配给用户的唯一标识符。 - **用户提供的标识(User-Supplied Identifier)**:用户...
Java-openid 是一个 Java 实现的 OpenID 协议库,它为开发者提供了一种在 Java 应用程序中集成 OpenID 身份验证的能力。 在 "java-openid-master.zip" 压缩包中,我们可以找到源代码和其他相关资源,用于理解 ...