IT技术博客大学习 共学习 共进步

互联网上的单点登录研究

流金岁月 2011-09-04 22:44:22 浏览 5,023 次

                                        中国互联网络信息中心 孔 宁

   摘 要:本文通过介绍当前两个著名的单点登录协议:微软Passport单点登录协议以及自由联盟(Liberty Alliance)规范,来阐述单点登录技术的基本原理。并介绍一个使用个人域名作为身份标识的单点登录系统的具体实现。最后简要分析了当前单点登录协议的可行性及其存在的不足。

   关键词:单点登录; 微软Passport; 自由联盟规范; 个人域名; Kerberos

                                The Study on Single Sign-On (SSO) mechanism

                                                KONG Ning

Abstract :With the introduction to the two famous protocols of Single Sign-On: Microsoft Passport and Liberty Alliance Project Specification, this dissertation addresses the basic theory of Single Sign-On technique. And it introduces the implementation of a Single Sign-On system using Personal Domain Name as ID. At last it briefly analyses the feasibility and the inadequacy of the current protocols of Single Sign-On.

Key words :Single Sign-On; Microsoft Passport; Liberty Alliance Project Specification; Personal Domain Name; Kerberos

                                                    引 言

   随着互联网络应用的普及,越来越多的人开始使用互联网上提供的服务。然而目前提供服务的网站大多采用用户名、口令的方式来识别用户身份,这使得用户需要经常性的输入自己的用户名、口令。显然这种认证方式存在着弊端:随着用户网络身份的增多,用户相应的需要记忆多组用户名、口令,这给用户造成记忆上的负担;另外频繁的输入用户名、口令,会相应的增大用户的口令密码被破解的机率。为了改变这一现状,单点登录技术应运而生。单点登录技术的核心思想是通过一定的方式使得各提供服务的网站之间建立某种联系,用户只需要在其中一个认证网站进行登录后,即可实现全局登录,当用户再访问其他网站时,不需要再次登录,其身份就可以被验证。我们可以看到采用单点登录技术后,用户只需要记忆一组用户名、口令,并且在登录多个网站时只需要输入一次用户名、口令,这就使得用户可以更加安全快捷的使用互联网上的各种服务。

   单点登录的一般模型

   在单点登录的一般模型中,一般由三部分构成:(1)用户 (2)身份提供者 (3)服务提供者。如图1所示。



            图1 单点登录的一般模型

   用户是指通过浏览器来使用单点登录服务的个体。身份提供者在单点登录中提供对个体的身份验证服务,相当于一个权威机构。服务提供者是指具体为用户提供某种服务的机构。用户在身份提供者那里注册身份,当用户进行单点登录时,需要在身份提供者处登录,进行身份验证,由身份提供者为用户标记登录信息。通常把用户在身份提供者处进行的登录称作全局登录。用户在全局登录后,当访问其它的服务提供者时,被访问的服务提供者首先直接与身份提供者进行交互,来询问该用户是否已全局登录,如果确定该用户已全局登录,则允许该用户来访问自己提供的服务,否则将该用户重定向到身份提供者处,进行全局登录。

   在具体的单点登录实现中,身份提供者和服务提供者进行交互的方式不尽相同。如微软的Passport单点登录采用的是在重定向信息中包含加密后的验证信息来进行交互,而自由联盟的单点登录规范是采用安全声明标记语言(SAML)来进行交互的。下面本文就通过介绍当前这两个主流的单点登录协议:微软Passport单点登录协议和自由联盟规范来进一步阐述单点登录技术。

  微软Passport单点登录协议

3.1 微软Passport服务

   提及微软Passport单点登录协议,我们自然要先介绍的是微软Passport服务。在微软的www.passport.com站点上我们可以看到微软Passport的使用条款和通告。微软Passport 是由微软公司运行的一种 Web 服务,该服务会使用户登录到网站以及执行电子商务交易的过程变得更加简便。微软的Passport服务是.Net战略的一部分,通过一次登录就可以使用户获得访问很多网站的权限。微软宣称Passport的目的是使会员在使用互联网和在线购物时更方便、快捷和安全,它得到了包括1-800-Flowers、CostCo、OfficeMax和Victoria Secret在内的诸多著名在线商店的支持。微软Passport服务从本质上来说是一种由微软控制的中央统筹式的单一登录服务。微软旗下的Hotmail、Messenger与ISP服务(MSN)都有加入此机制,目前约有2亿个使用账户。

3.2 微软Passport单点登录协议

   在微软Passport服务模式中,有三个主体:(1)使用web浏览器的用户(假设该用户已经注册了Passport服务),(2)服务提供者(对用户提供某种服务的网站),(3)Passport登录服务器。Passport登录服务器保存着用户的认证信息以及用户的个人信息,服务提供者在得到用户允许的前提下可以到Passport登录服务器上获取用户个人信息。

   微软Passport单点登录协议流程如下[1]:当一个用户通过浏览器访问一个服务提供者网站时,如果该网站需要验证用户的身份,就把该用户的浏览器重定向到Passport登录服务器。下一步Passport登录服务器通过SSL连接为用户提供一个登录页面,在用户登入该服务器后,被重定向回服务提供者网站。此时认证信息被包含在重定向消息中。该认证信息使用三重DES加密算法加密,加密密钥是由Passport登录服务器和服务提供者网站事先协商好的。在服务提供者网站检验了认证信息的真实性后,即可认为该用户成功登录。具体流程图可参考图2所示。


   
                     图2 Passport 单点登录流程图[4]

     微软Passport单点登录协议采用了Kerberos认证机制来完成身份认证工作。Kerberos是一种为网络通信提供可信第三方服务的面向开放系统的认证机制。在Kerberos认证机制中,每当用户(client)申请得到某服务程序(server)的服务时,用户和服务程序会首先向Kerberos要求认证对方的身份,认证建立在用户(client)和服务程序(server)对Kerberos的信任的基础上。在申请认证时,client和server都可看成是Kerberos认证服务的用户,为了和其它服务的用户区别,Kerberos用户统称为principle,principle既可以是用户也可以是某项服务。当用户登录到工作站时,Kerberos对用户进行初始认证,通过认证的用户可以在整个登录时间得到相应的服务。Kerberos既不依赖用户登录的终端,也不依赖用户所请求的服务的安全机制,它本身提供了认证服务器来完成用户的认证工作[7]。简单地说,Kerberos通过集中存储的安全信息和分布式的“tickets”来实现用户身份认证。具体而言,微软Passport服务通过如下步骤实现用户身份验证:

(a) 用户开启客户端应用程序或浏览器,打开登录界面,并输入用户名、口令。
(b) 登录动作引发客户端应用程序或网站向微软Passport请求一个登录确认证明(即“ticket-granting-ticket”,TGT)。
(c) 微软Passport验证用户用户名、口令,颁发TGT,确认登录已经成功。在满足一定安全约束条款的前提下,该TGT在一定时期内被缓存。
(d) 客户端应用程序或网站向微软Passport提交TGT,同时请求颁发一个“会话证明”。
(e) 微软Passport使用TGT来验证客户端的身份是否有效,确认后向相应的Web Service颁发“会话证明”。
(f) 客户端向所请求的Web Service提交会话证明,经确认后,客户端开始同Web Service进行信息交换,所有数据都经由该“会话证明”加密从而确保安全。

3.3 微软Passport小结

虽然微软Passport已经提供了多年的服务,但是其安全性一直为人们所置疑。首先,其中央统筹的模式是最为大众所质疑的。因为核心的验证服务器以及用户个人信息服务器都是微软一手控制的,再加上其技术细节并不对外公开,而且没有依据某一标准,致使人们一直担忧用户的个人资料被泄漏。其次,微软的Passport系统曾被个人或黑客多次入侵。这些都限制了微软Passport服务的进一步推广。

   自由联盟规范

4.1 自由联盟(Liberty Alliance)

   自由联盟是一个联盟机构的名称,该联盟的宗旨是创建一个经由与Internet相连的任何器件都能实现的具有开放性的、联合的、单一签字身份识别的解决方案,该机构的目标是为实现利用因特网进行交易时随时随地的单点登录认证,并且进行有关标准的制订。所有商业机构和非商业机构都可取得该机构的成员身份。加盟该机构的创始企业中有服务提供、汽车制造、金融服务、旅行业、数字媒体、零售业、电信及技术相关业界的著名企业。目前自由联盟由170多家厂商组合,包括Sun、Nokia、American Express等,他们负责提供技术规范与商业指南来当作跨企业的身份认证服务。Liberty本身并不产生应用,这方面是由技术厂商(如Sun、Novell、Peoplesoft与HP等)来开发支持Liberty标准的兼容应用。自由联盟规范可让不同的服务供应商加入一个联邦式的信赖网络中[6]。

   自由联盟的主要目标有如下三个方面:

1)使个人消费者和企业用户能够安全保管个人信息。基此,推进无信息垄断的、可以相互运用并跨越多个网络的服务。
2)制订实现“单点登录”的开放标准。基此,使用户在任何1个WWW站点通过认证后,不必接受其它站点认证就可以使用其服务。
3)制订所有接入因特网的设备都可以使用的网络认证开放标准。基此使手机、车载设备和信用卡等各种各样的终端间都能进行安全的认证。

4.2 自由联盟规范

   自由联盟于美国当地时间2003年3月11日公布了单点登录架构“Liberty Alliance Federated Network Identity Architecture”的概要及其发展蓝图。自由联盟声称利用该架构能够解决众多阻碍Web认证服务的技术性障碍。
自由联盟分两个阶段公布支持该架构的规范--自由联盟规范。在第一阶段,自由联盟于2002年7月公布了作为联盟用户管理基础的规格集“Liberty Alliance Identity Federation Framework(ID-FF,自由联盟统一联合框架)”,并于2003年1月进行了修订。ID-FF支持将已经具有关系的多用户信息进行联合或链接,使用户一次登录即可享受多家企业提供的服务。在第二阶段,自由联盟在2003年内强化ID-FF,并发表了“Identity Web Services Framework(ID-WSF,统一Web服务框架)”。ID-WSF公布了构筑基于相互认证的Web服务所需关键技术的概要。自由联盟认为这种Web服务符合特定的工作目的,在共享用户信息方面,保护个人隐私和系统安全。另外,自由联盟还将提供基于ID-WSF的规格集“Liberty Alliance Identity Services Interface Specifications(ID-SIS,自由联盟统一服务接口规范)”。这样,企业就可以使用标准方法提供特征登记/联系地址/日历/位置信息和报警服务等[3]。

4.3 自由联盟具体协议

   在自由联盟规范中定义了四个具体的协议[2]:

(1) 单点登录以及身份联合
(2) 名字注册
(3) 身份联合终止声明
(4) 单点退出

   与微软Passport相同,自由联盟具体协议也具有三个主体,它们分别是:(1)主体(Principals),(类同微软Passport中的用户),(2)服务提供者(Service Providers),(3)身份提供者(Identity Providers)。其中服务提供者类同于微软Passport中的服务提供者,均是指为用户提供某种服务的网站。自由联盟中的身份提供者是一种特殊的服务提供者,它为其他的主体提供身份认证、主体信息访问控制等服务,虽然它的作用等同于微软Passport中的Passport登录服务器,但不同之处在于自由联盟中的身份提供者并不是唯一的,而可以是多个且相互独立存在的,这点是与微软Passport的中央统筹式的单一登录服务有着根本区别的。

   下面我们进一步讨论一下自由联盟具体协议中的单点登录以及身份联合。单点登录以及身份联合是自由联盟具体协议中最复杂的协议。该协议在很大程度上依赖于安全声明标记语言(SAML)。首先让我们了解一下SAML。SAML并不是一项新技术。确切地说,它是一种语言,进行单一的XML描述,允许不同安全系统产生的信息进行交换。SAML在标准行业传输协议环境里工作,例如HTTP、SMTP和FTP;同时也服务于各种各样的XML文件交换框架,如:SOAP和BizTalk。SAML具备的一个最突出的好处,是使用户能够通过因特网进行安全证书移动。SAML的工作原理如下[5]:

(1) 用户向认证机构提交证书。
(2) 认证机构对用户的证书进行断言,并且产生一个认证声明以及一个或更多的属性声明(如用户的资料信息)。此时用户立即就会得到由SAML断言的认证和识别标志。
(3) 用户使用这个SAML标志(认证声明)尝试访问一个受保护的资源。
(4) 用户对保护资源的访问请求被PEP(Policy Enforcement Point)截取,同时用户的SAML标志(认证声明)被PEP提交给属性管理。
(5) 属性管理或PDP(Policy Decision Point)基于自身的政策标准产生一个决定。如果批准用户对该保护资源进行访问,就会产生一个附加在SAML标志(认证声明)上的属性声明。用户的SAML标志(认证声明)就能够以单点登录方式呈现给信任的商业伙伴。

   下面简单介绍一下自由联盟单点登录协议的流程,其流程同微软Passport单点登录协议流程大致相同,不同之处是:在自由联盟中身份提供者并不是通过重定向消息来将认证消息传递给服务提供者的,而是通过SAML与服务提供者交互来完成的。具体流程可参考图3。



                 图3 自由联盟单点登录流程图[4]



4.4 自由联盟规范小结


   与微软Passport不同,自由联盟规范依据了OASIS产业标准,它不是中央统筹式的单一登录模式,而是一种相对公允的模式,在其信任圈中可以存在多个独立的身份提供者。但目前自由联盟规范仍处于研究阶段,并且其本身的高复杂性导致目前还没有像微软Passport服务那样有成型的应用服务。

   以个人域名作为身份标识的单点登录系统

   下面介绍的是笔者接合对微软Passport以及自由联盟单点登录协议的研究,设计开发的一个以个人域名作为身份标识的单点登录系统。该系统开发环境为:操作系统Linux 9 、脚本语言PHP5、数据库mysql 。

   本系统由三部分组成:(a)IDP服务器(个人域名认证服务器) (b)SP1服务器(服务提供者1) (c)SP2服务器(服务提供者2)。其中IDP相当于Passport中的登录服务器,作用是验证用户身份,SP1、SP2为模拟的两个服务提供者。

   从上文中我们可以了解到,微软Passport以及自由联盟为确保其单点登录系统中登录账户的唯一性、可信性,都设置了专门的身份认证服务器。而在笔者设计的单点登录系统中直接采用个人域名来作为身份标识,即通过个人域名认证服务器来确保登录账户的唯一性、可信性。众所周知,域名类似于互联网上的门牌号码,是用于识别和定位互联网上计算机的层次结构式字符标识,与该计算机的互联网协议(IP)地址相对应。同样,面向个人开放的个人域名好比是互联网上的身份证,也具有唯一性、权威性的特征。因而将个人域名作为单点登录系统中的登录账户,不仅能够确保单点登录系统中身份的可信性,还能减少单点登录系统的开发成本,从而有利于单点登录系统的推广。

   本系统单点登录流程如下:用户在IDP可以注册个人域名作为登录账户,用作单点登录时的口令。用户在IDP可以直接进行全局登录,在SP1、SP2也可通过超链接到IDP的登录页面进行全局登录。在用户全局登录后,IDP在用户浏览器中设置cookie,cookie中存入已加密的信息,该信息用于表明用户已全局登录。全局登录后,当用户访问某一SP时,该SP自动将浏览器重定向到IDP,询问IDP该用户是否已全局登录,此时IDP检查用户浏览器中的cookie来判断用户是否已登录,然后IDP将用户浏览器重定向回SP,并在重定向信息中包含验证信息,SP通过读取验证信息来判断该用户是否已全局登录。如果判断通过,则允许该用户访问其服务;如果判断没有通过,则SP将用户指向SP登录界面。另外,在IDP、SP1、SP2都提供全局退出功能,用户执行全局退出操作时,IDP将清除用户浏览器中的cookie。

   IDP与各SP采用相同的对称加密算法、加密密钥来加密验证信息。另外,为了避免SP遭受重放攻击,每次SP同IDP交互前,SP均产生一个随机数,并将该随机数加密,然后包含在重定向到IDP的重定向信息中。IDP通过解密获得该随机数,并将其包含在验证信息中一起加密,然后将该加密信息包含在重定向到SP的重定向信息中。SP解密后,首先要判断其中的随机数是否是自己刚才产生的,如果不是则认为该重定向信息为重放攻击,不予处理。
具体流程图请参看图4、图5。



                   图4 用户在未全局登录的情况下访问SP1



   

                  图5 用户在已全局登录的情况下访问SP2

   本系统基本实现了单点登录的功能,IDP与SP之间验证信息的传递方式与微软Passport类似,采用加密传输的方法;本系统功能比较单一,主要实现了单点登录功能,对于身份联合、用户个人信息访问控制等功能并未实现。本系统基本上是安全的,用户登录提交均采用https方式,并且在IDP与SP交互时,也利用了SP产生的随机数来避免了遭受重放攻击。本系统的缺点是对于cookie的加密保护不够完善,IDP与SP交互信息也只是使用简单的对称加密算法加密,而且加密函数、密钥均需要双方事先协商好。因此本系统并不适用于实际应用。

   结束语

   随着互联网络的飞速发展,各种提供网络服务的网站也如雨后春笋般纷纷涌现,因此人们对于单点登录的需求也会越来越强烈。然而究竟单点登录是否可行?本文通过分析当前两个最主流的单点登录协议:技术细节不公开的微软Passport单点登录协议,以及仍处于研究阶段的自由联盟(Liberty Alliance)规范,并结合笔者实现的以个人域名作为身份标识的单点登录系统,得出以下结论:单点登录在技术上是完全可行的,只要确保单点登录系统的安全性,以及认证服务器的公正权威性,单点登录技术一定会被人们广泛接受,进而在互联网络应用中为人们提供一个更加便利的环境。

参考文献
[1] David P. Kormann .Aviel D. Rubin.Risks of the Passport Single Sign on Protocol[EB/OL].2000
[2] Susan Landau ,Jeff Hodges. A Brief Introduction to Liberty[J-OL].February 2003
[3] Liberty Alliance Project.Liberty Alliance Phase 2 Final Specifications
[EB/OL].http://www.projectliberty.org/specs/ , 2003
[4] Ing. Radovan Seman. Internet applications security[M]. November 2002
[5] ZDNet China专稿. SAML标准提高网络安全性[J-OL].2003年7月1日
[6] ZDNet China专稿. 深度分析:“自由联盟”,还是微软Passport?[J-OL].2003年9月20日
[7] 姜伟. Kerberos:面向开放式网络的认证服务[D].1999年12月21日

建议继续学习

  1. python实现自动登录discuz论坛 (阅读 32,662)
  2. 微信扫码登录网页实现原理 (阅读 17,266)
  3. 初探单点登录 SSO (阅读 10,504)
  4. 如何设计用户登录 (阅读 6,524)
  5. 你会做Web上的用户登录功能吗? (阅读 6,264)
  6. 如何让ssh登录更加安全 (阅读 5,604)
  7. perl的expect使用方法,实现非交互式登录。 (阅读 5,403)
  8. 什么是OpenID?OpenID概念、原理和案例 (阅读 5,363)
  9. Apache + Jetty 架设 CAS 单点登录 (阅读 5,063)
  10. 为什么要登录? (阅读 4,963)