OpenID及其原理介绍
昨天和朋友谈到统一身份验证时,才知道这个OpenID的东东,汗一个先...
这是一套不别于微软的Passport(或者其他厂商的一些所谓通行证技术)的开源的解决方案,支持自己架设验证服务器。我想对于企业内部大部分应用系统实现统一登录是会有些帮助的。它的主要原理是
1. 你首先得拥有一个合法的OpenID帐号,也就是说需要在一个验证服务器申请了一个帐号。
2. 你有了这个帐号之后,就可以在任何一个其他支持OpenID验证的网站,并且用你上面申请的OpenID进行登录
3. 因为这个网站并不知道你的身份是否正确,所以它会请求你的验证服务器对你的身份进行验证。
4. 验证服务器告诉网站说,你是合法用户
5. 网站接受你的身份,让你进入。
在生活中的例子大致可以是这样的:
1. 你在本国申请一个护照
2. 你周游列国时出示护照
3. 该国的出入境管理单位,根据你的护照信息,请求你所在国的出入境管理单位的验证
4. 所在国的出入境管理单位确认你的身份
5. 你可以在任何国家游览了
从技术上说,这个OpenID与Passport并没有本质区别。与Cardspace的道理也是一样的。甚至可以说,它的原理并不深奥。回头有机会研究看看如何应用起来。
网上也有人讨论说,这与网站的根本利益是冲突的,因为网站都想拥有自己的用户群体。这没错,但对于企业内部应用来说,可能情况就不是这样的了。我比较关注企业应用层面。
官方网站是http://openid.net/
开源地址是http://code.google.com/p/dotnetopenid/
OAuth和OpenID的区别
OAuth关注的是authorization;而OpenID侧重的是authentication。从表面上看,这两个英文单词很容易混淆,但实际上,它们的含义有本质的区别:
- authorization: n. 授权,认可;批准,委任
- authentication: n. 证明;鉴定;证实
OAuth关注的是授权,即:“用户能做什么”;而OpenID关注的是证明,即:“用户是谁”。
如果混淆了OAuth和OpenID的含义,后果很严重。以国内某网站开发的应用为例:它的功能是通过OAuth授权让新浪微博和豆瓣的用户使用各自的身份发表评论,如下图所示:
此类应用属于身份证明问题,本应该通过OpenID来实现,但因为错误的使用了OAuth,从而带来安全隐患:设想一下用户只是在网站上发表了评论而已,但却赋予了网站随意操作自己私有数据的权利!这就好比:快递员送包裹,为了证明收件人的身份,原本你只要给他看一下身份证即可,可你却把防盗门钥匙都给他了!Oh,My God!
-
OpenID是关于证明、证实身份(Authentication)的,好比火车站进站的时候拿出身份证和车票来看,比对是否同一个人。这是在回答「我是谁?这就是我」,是为了证实「这不是一个匿名的不可查的信息源头」,因为匿名对象和信息对网络服务商来说不好统计管理,也不利于产生价值。
-
OAuth 是关于授权、许可(Authorization)的,好比坐飞机过安检的时候除了看身份证,还要求掏出兜里的东西,拿出包里的东西、手机等随身物品以便检查,这时就需要得到被检查人的许可才行,被检查人有权利扭头就走,但要想登机,必须给予许可、掏出物品。这是在回答「我同意让你对我进一步做些什么」,是为了在被授予权限的前提下,更多的获取除了账号密码以外的个人信息,例如:联系人通讯录,邮箱号,电话号,地址,照片,聊天记录,网络发言、活动记录,GPS 信息等等,来满足用户对服务的功能需要,或者「其他需要」。