也许大家都有这样的经历与烦恼:当你为了使用某个网站的服务时(若你还没在该网站上注册过),你不得不先注册一个帐号。当你在一堆的网站上注册帐号后,你必需面临管理这些帐号的烦恼。也许你会这样考虑,不同网站注册的帐号信息都用同一个用户名与密码,这样也许会减轻你的烦恼,但是却给你带来的安全隐患,一旦你的帐号在某个网站泄漏后。OpenID正式基于解决这类问题而提出的一个国际标准,用于打通各大网站之间的用户体系。你可以使用某一网站的帐号去登录另一网站,只要这些网站都是实现了OpenID的服务。目前Google,Yahoo,Flickr,AOL等都支持OpenId服务。2009年2月初,Facebook也宣布加入OpenId基金会。
一、OpenID简介
OpenID官方网站http://openid.net首页对OpenID的介绍如下:OpenID is a free and easy way to use a single digital identity across the Internet.With one OpenID you can login to all your favorite websites and forget about online paperwork!其大概意思就是说:OpenID是一个单一的、免费的数字身份标识,使用它,你就可以登录你经常登录的网站。
OpenID提高了互联网服务的用户体验。显而易见,就终端用户而言,OpenID降低了用户管理多个网站帐号的烦恼,用户可以享受类似单点登录的体验。对于企业来说,OpenID降低了用户帐号管理的成本。对于应用开发者来说,OpenID是一个开放的、去中心化的,免费的、以用户为中心的身份标识体系。Java的一个优势是跨平台,大家都熟悉的那句话:Write Once,Run Anywhere(一次编写,到处运行),同样,OpenId的优势是:Register Once, Use Anywhere(一处注册,到处使用)。
OpenId是一个以用户为中心的数字身份识别框架,它具有开放、分散、自由等特性。OpenId的创建是基于这样一个概念:我们可以通过URI(或者URL网址)来识别一个网站。同样,我们也可以通过这样的方式来识别一个用户的身份。OpenId系统的身份认证就是通过URI来认证用户身份。目前绝大部分网站都是通过用户名与密码来登录认证用户身份,这就要求大家在每个你要使用的网站上注册一个帐号。如果使用OpenId,你可以在一个提供OpenId的网站上注册一个OpenId,以后你可以使用这个OpenId去登录支持OpenId的网站。这正是一处注册,到处使用的体现。
二、OpenID相关术语
- End User:终端用户,使用OP与RP的服务
- Relying Party依赖方:简称RP,服务提供者,需要OP鉴权终端用户的身份
- OpenID Provider:OpenID提供者,简称OP,对用户身份鉴权
- Identifier标识符:标识符可以是一个HTTP、HTTPS或者XRI(可扩展的资源标识)
- User-Agent:实现了HTTP1.1协议的用户浏览器
- OP Endpoint URL:OP鉴权的URL,提供给RP使用
- OP Identifier:OP提供给终端用户的一个URI或者XRI,RP根据OP Identifier来解析出OP Endpoint URL与OP Version
- User-Supplied Identifier:终端用户使用的ID,可能是OP提供的OpenID,也可以是在RP注册的ID。RP可以根据User-Supplied Identifier来解析出OP Endpoint URL、OP Version与OP_Local Identifer
- Claimed Identifier:终端用户声明自己身份的一个标志,可以是一个URI或者XRI
- OP-Local Identifier:OP提供的局部ID
三、OpenID认证流程
OpenID一个典型的应用场景就是:当终端用户登录一个支持OpenID的网站(RP)时,与在该网站进行用户登录方式不同(该终端用户也许没有在该网站注册过),该用户选择了以OpenID的方式登录该网站。OpenID是该用户在另一个网站(OP)注册的一个URL。RP就会根据用户提供的OpenID去发现OP,然后请求该OP对该用户身份进行鉴权。OP收到RP请求后,会要求用户登录OP认证页面进行鉴权,鉴权后,OP会提醒该用户是否容许外部网站对你鉴权。用户同意后,OP将鉴权结果返回给RP。
下面就OpenID的认证流程进行简要的介绍,下图就是OpenID的认证流程:
1. 终端用户请求登录RP网站,用户选择了以OpenID方式来登录
2. RP将OpenId的登录界面返回给终端用户
3. 终端用户以OpenID登陆RP网站
4. RP网站对用户的OpenID进行标准化,此过程非常负责。由于OpenID可能是URI,也可能是XRI,所以标准化方式各不相同。具体标准化过程是:如果OpenID以xri://、xri://$ip或者xri://$dns开头,先去掉这些符号;然后对如下的字符串进行判断,如果第一个字符是=、@、+、$、!,则视为标准的XRI,否则视为HTTP URL(若没有http,为其增加http://)。
5. RP发现OP,如果OpenId是XRI,就采用XRI解析,如果是URL,则用Yadis协议解析,若Yadis解析失败,则用Http发现。
6. RP跟OP建立一个关联。两者之间可以建立一个安全通道,用于传输信息并降低交互次数。
7. OP处理RP的关联请求
8. RP请求OP对用户身份进行鉴权
9. OP对用户鉴权,请求用户进行登录认证
10. 用户登录OP
11. OP将鉴权结果返回给RP
12. RP对OP的结果进行分析
13. RP分析后,如用户合法,则返回用户鉴权成功,可以使用RP服务
以上就是OpenId认证流程简介。OpenID4Java是一个开源库,提供了OpenID框架。OpenID4Java是对OpenID1.1和2.0规范的实现,目前它通过code.google.com系统进行维护。此项目初始代码是由Sxip捐献出来的,而后Atlassian等公司参与进来,并为实现支持2.0规范(属性交换规范)的API贡献了大量的工作。OpenID4Java项目地址:http://code.google.com/p/openid4java/
四、Yahoo OpenID服务
目前很多大公司如Google,Yahoo,AOL,Microsoft等等都支持OpenId。下面我们可以看看这个网站,他是支持openid,http://www.plaxo.com/
我们点击右上角的登录按钮,请求登录该网站,登录页面如下图所示:
与传统的登录页面不一样的是,该登录页面还提供了以OpenID方式登录的入口。我们选择使用Yahoo用户进行登录,将跳转到yahoo的登录页面,如下图所示:
输入用户名与密码,Yahoo提示您,您将要登录到外部网站Plaxo,请求您的确认,如下所示:
同意后,您将以Yahoo OpenID登录到plaxo网站。
五、OpenID的前景
光从技术角度来考量OpenID的前景时,我们都对他充满着信息,激情。OpenID的出现,确实很该用户友好的体验,更方便用户畅游互联网。但是,这只是技术上的考量。OpenID的最终用户是网民们。OpenID提出到现在,有多少人知道有OpenID的存在,甚至连身边的程序员们都很少知道,更不用说普普通通的网民们了。所以从技术化的东西到被大家所熟知的技术,OpenID还有很长的路要走。过去,国内也有不少技术人员对OpenID充满着激情,但是他们的激情是短暂的,或者不能称之为激情。总结起来,OpenID在以下某些方面还令人担忧。
一是:OpenID认知度太低,上面已解释过。
二是:密码安全度降低,只要OpenID的密码被泄露,基本上所有的网站都被泄露。这与"一处注册,到处使用"形成对应,即"一处泄露,到处泄露"。
三是:OpenID并非真正的Open,很多网站表面上支持OpenID,实际上,还是不断的骚扰OpenID用户,在他们网站上注册帐号,在背后偷偷的沉淀OpenID用户。所以,就目前来说,OpenID对于集团内各子公司用户体系的打通还是可行的,对于与外部公司是否使用OpenID还得谨慎点。