对于企业内部系统来说,CAS系统是一个应用最广的开源单点登陆实现了,其实现模仿Kerberos的一些概念,例如KDC、TGS等等,都是来自于Kerberos。具体可参见 用CAS原理构建单点登录。互联网发展之后,多个网站需要统一认证,业界需要适合互联网的单点登陆技术。
2002年,微软提出了passport服务,由微软统一提供帐号和认证服务,理所当然,大家都不愿意受制于微软,但是很认同微软提出WEB SSO理念,于是产生了Liberty Alliance,另外指定一套标准,这套标准发展起来就是SAML(安全断言标记语言),已经被结构化信息标准促进组织(OASIS)批准为Web 单点登录的执行标准,目前SAML的版本是SAML V2。SAML连同Web单点登录共同构成了现代网络环境中的必备条件。
当今,越来越多的系统通过Web服务、门户和集成化应用程序彼此链接,对于保证信息安全交换标准的需求也随之日益增多。安全断言标记语言(Security Assertion Markup Language,SAML)提供了一个健壮且可扩展的数据格式集,在各种环境下交换数据和身份识别信息。SAML的出现大大简化了Web单点登录,并被结构化信息标准促进组织(OASIS)批准为Web SSO的执行标准。这里的一个关键概念是身份联邦,它可满足SAML的定义,也就是说可使用独立、受管理的多个信息来源中的信息。
Web安全方面最具挑战性的一个问题是维持一次无缝操作和安全环境时, 使各不相同的安全系统达到一体化。比如在电子商务活动过程中,经常需要通过网络来交换机密的资料或数据,因此,对于安全功能的要求十分严格。
OASIS建立的安全标准—SAML是基于XML(可扩展标记语言)、面向Web服务的架构。SAML通过互联网对不同安全系统的信息交换进行处理。
SAML是一种语言,进行单一的XML描述,允许不同安全系统产生的信息进行交换。通常来说,一个企业在物理或逻辑的范围已经界定了企业的IT安全;然而,由于在线合作需要共享更可靠的安全服务环境,因此IT安全越来越成为人们关注的重点问题。
SAML正是为解决网络安全性问题而发挥其作用。SAML在传统意义上的安全界定与商务站点之间建立了一种安全信息的交换渠道。SAML作为安全信息交换的“中间人”,促使一个站点上的交易业务能够在另一个信任的站点上得到处理完成。由此可见,实现交易双方商业协议或合作的一个先决条件,是要求使用SAML作为共享安全架构的一部分。
SAML在标准行业传输协议环境里工作,例如HTTP、SMTP和FTP;同时也服务于各种各样的XML文件交换框架,例如SOAP和BizTalk。SAML具备的一个最突出的好处,是使用户能够通过互联网进行安全证书移动。也就是说,使用SAML标准作为安全认证和共享资料的中间语言,能够在多个站点之间实现单点登录。
SAML是一种基于XML语言用于传输认证及授权信息的框架,以与主体相关的断言形式表达。在这里,主体是一个实体(人或计算机),这个实体在某个安全域中拥有一个特定身份,断言可传递主体执行的认证信息、属性信息及关于是否允许主体访问其资源的授权决定。针对以上不同目的,SAML提供以下几种不同类型的安全断言:
● 认证断言(Authentication Assertion):认证断言用来声称消息发布者已经认证特定的主体。
● 属性断言(Attribute Assertion):属性断言声称特定主体具有特定的属性。属性可通过URI(统一资源标识)或用来定义结构化属性的一种扩展模式进行详细说明。
● 决定断言(Decision Assertion):一个决定断言报告了一个具体授权请求的结果。
● 授权断言(Authorization Assertion):授权断言声称一个主体被给予访问一个或多个资源的特别许可。
SAML断言以XML结构描述且具有嵌套结构,由此一个断言可能包括几个关于认证、授权和属性的不同内在断言(包括认证声明的断言仅仅描述那些先前发生的认证行为)。
在2005年底,随着监控、移动设备、宽带业务以及应用安全领域的四家主要厂商通过了最后一回合的联邦身份互操作性测试,自由联盟(Liberty Alliance)公布了SAML 2.0。
SAML 2.0版在2005年3月刚刚被OASIS批准。Liberty Alliance的目的是让尽可能多的厂商把SAML加入到他们的产品线中。微软的Windows Identity Foundation(WIF)支持SAML令牌。
有一些互联网公司,拥有众多很多帐号,例如GOOGLE、YAHOO、Facebook,希望别人的系统使用它们的帐号登陆。他们希望一种足够简单的WEB SSO规范,于是选择一种草根网络协议OpenID。OpenID,名字取得好,顾名思义,一看就知道它是干嘛的。国内也有例如豆瓣网。openID的确足够简单,但是协议本身是不完善,可能需要一些补充协议才能够满足业务需求。例如GOOGLE采用OpenID + OAuth。目前支持OpenID有Yahoo、Google、Windows Live。
Open ID和SAML两种规范,都将会减少系统间交互的成本,我们提供Open API时,应该支持其中一种或者或两种规范。