翻译自一位外国大牛的系列文章,共46篇,整理不易,内容详实,只提供给需要的人看。懂,请下载。
文件:n459.com/file/25127180-479629106 访问密码:551685
以下内容无关:
-------------------------------------------分割线---------------------------------------------
当我们要使用一个网站的功能时,一般都需要注册想用的账号。现在的互联网应用很多,一段时间之后你会发现你注册了一堆账号密码,根本记不住。
你可能会想到所有的网站都用同一套用户名和密码,这样虽然能解决账号管理的问题,但也加大了账号密码泄露的风险。
虽然,现在的网站有提供短信验证码登录技术,但是今天我们要聊的是一个比较“古老”的技术——OpenID,看看之前的技术是怎么解决密码太多不便于管理的问题的。
写这篇文章的目的更多的是兴趣使然,因为实践过程中不太可能会单纯的使用OpenID登录,国内也几乎没见到支持OpenId的网站,至少主流的大厂没支持。但是我个人觉得,用不到并不代表你一定不需要知道,了解技术发展的历史,不仅可以给我们借鉴,而且能提升自己的技术底蕴。(哈哈,有点装X~~)
基础概念#
在正式介绍OpenID之前,我再啰嗦几个基础概念。
Authentication: 身份鉴别,简称认证,简单讲就是怎么鉴定你就是某个人;
Authorization Server/Identity Provider:把负责 认证的服务 称为 AuthorizationServer 或者 IdentityProvider,简称IDP;
Authorisation: 资源访问,简称授权,简单讲就是给某个人赋予某些权限;
Service Provider/Resource Server:把负责提供资源(API调用)的服务称为 ResourceServer 或者 ServiceProvider,简称 SP
OpenID相关的几个概念
User:网站访问者操作的浏览器
RP:Relying Party ;服务提供者,就是用户要访问的网站。
OP:OpenID Provider ;OpenID提供者,就是提供OpenID注册的服务商。
OpenID简介#
OpenID 是由LiveJournal和SixApart开发的一套身份验证系统,是一个以用户为中心的数字身份识别框架,它具有开放、分散、自由等特性。
OpenID 的创建基于这样一个概念:我们可以通过 URI (又叫 URL 或网站地址)来认证一个网站的唯一身份,同理,我们也可以通过这种方式来作为用户的身份认证。它不基于某一应用网站的注册程序,而且不限制于单一网站的登录使用。OpenID帐号可以在任何OpenID应用网站使用,从而避免了多次注册、填写身份资料的繁琐过程。简单言之,OpenID就是一套以用户为中心的分散式身份验证系统,用户只需要注册获取OpenID之后,就可以凭借此OpenID帐号在多个网站之间自由登录使用,而不需要每上一个网站都需要注册帐号。
OpenID的工作流程#
假设你已经拥有一个在A网站(A网站就是OP角色)注册获得的OpenID帐号,B网站(B网站就是RP角色)支持OpenID帐号登录使用,而且你从未登录过。此时你在B网站的相应登录界面输入你的OpenID帐号进行登录的时候,浏览器会自动转向A网站的某个页面进行身份验证。这时你只要输入你在A网站注册时候提供的密码登录A网站,对B网站进行验证管理(永久允许、只允许一次或者不允许)后,页面又会自动转到B网站。如果你选择了允许,那就会登录进入B网站。这个时候你就可以以你的OpenID帐户身份实现B网站的所有功能。
上面描述了B网站使用A网站提供的OpenID进行登录,你也可以使用这个OpenId登录其他支持OpenID的网站。
OpenID的获取流程
首先用户选择一个OpenID 服务提供者,来注册 OpenID 帐号(跟传统的网站注册无异),注册后用户得到一个 OpenID网址(OpenID URL),如http:/collinye.openid.com ,可以简单的理解为用户名。
访问支持 OpenID 的网站,在登录时,输入你的 OpenID网址,通常此类登录页面的输入框会有如上图所示 OpenID 标志,然后点登录。
之后,会跳转你的OpenID 服务提供者的网站,并要求你输入注册时填写的密码,验证密码通过后会询问你是否允许该网站使用你的 OpenID 进行登录,经过允许后会跳转回原网站,并显示登录成功,之后你就可以以注册者的身份访问该网站。
认证流程
终端用户请求登录RP网站,用户选择了以OpenID方式来登录;
RP将OpenID的登录界面返回给终端用户;
用户输入OpenID,RP网站对用户的OpenID进行标准化,此过程比较复杂,因为OpenID可能是URI,也可能是XRI,所以标准化方式各不相同;
RP和OP进行连接;
RP请求OP对用户身份进行登录检查,OP对用户登录检查,如果用户还没有登录,请求用户进行登录认证;
用户登录OP、登录完检测RP请求哪些信息,如果没有需有用补填(OpenID主要负责认真,用户首次登陆注册可能还需要其他必要信息,可以在这个步骤补全);
OP将登录结果返回给RP,RP对OP的结果进行分析,RP分析后,如用户合法,则返回用户登录成功,可以使用RP服务。
OPENID优缺点#
优点#
对用户
简化注册登录流程:一定程度上避免了重复注册、填写身份资料的繁琐过程,不需要注册邮件确认,登录更快捷。
一处注册,处处通行:免去记忆大量账号的麻烦,一个OpenID就在任何支持OpenID的网站自由登录。
减少密码泄露风险:频繁登录各种网站,容易被垃圾网站暗地里收集密码和资料,或者冒充用户身份发送垃圾信息。
用户拥有账号信息控制权:根据对网站的信任程度,用户可以清楚的控制哪些profile信息可以被共享,例如姓名、地址、电话号码等。
对网站
共享用户资源:给所有支持 OpenID 的网站带来了价值。
已经有相当数量的高端注册用户可以直接使用,不必从零开始;
可以不负担自己建立会员系统或登录功能所需要的开发成本、机器、带宽、安全费用;
用户数据是安全的,用户数据不统一存储,用户可以任意选择、更换存储的server。没有组织,没有任何一个地方可以做root,没有任何一个机构或者个人能够从这里面获利。
缺点#
任何人都可以建立一个网站提供OpenID验证服务,而网站性能参差不齐,导致OpenID的验证过程不是很稳定。
如果提供OpenID验证服务的网站突然关闭的话,可能会导致大量用户无法使用多个网站的服务。
目前几乎所有支持OpenID的网站都很谨慎地将其做为一种可供选择的辅助登录方法,这会在很大程度上阻碍OpenID的发展。
目前支持OpenID的网站还不多,其独特的使用方法并不被多数用户所熟悉。
密码安全度降低,只要OpenID的密码被泄露,基本上所有的网站都被泄露。这与"一处注册,到处使用"形成对应,即"一处泄露,到处泄露"。
OpenID并非真正的Open,很多网站表面上支持OpenID,实际上,还是不断的骚扰OpenID用户,在他们网站上注册帐号,在背后偷偷的沉淀OpenID用户。所以,就目前来说,OpenID对于集团内各子公司用户体系的打通还是可行的,对于与外部公司是否使用OpenID还得谨慎点。
OpenID发展历程–OIDC#
原始的OpenID,也就是OpenID 1.0,它并不是真正的商业应用,但这个协议让行业领导者思考什么是可能的。
OpenID 2.0设计更为完善,提供良好的安全性保证。然而,其自身存在一些设计上的局限性,最致命的是其中依赖方必须是网页,但不能是本机应用程序;此外它还要依赖XML,这些都会导致一些应用问题。
OIDC,OpenID Connect是OpenID的第三代技术。OpenID Connect从SAML和OpenID 1.0/2.0中做了大量借鉴。OIDC不仅支持用户认证,还支持用户授权。
后面的文章中会介绍OIDC的相关内容。