付影平1,杜程2,刘建华1
(1.西安邮电大学信息中心,陕西西安710061;2.西安邮电大学计算机学院,陕西西安710061)
摘要:基于SAML 的单点登录基本模型的研究,通过阐述SAML和单点登录的基本概念和相关技术,对两种传统基于SAML单点登录的模型Pull和Push深入研究分析,并根据模型的不足之处提出了一个改进型模型。最后对改进型模型系统进行基于Java模块化的设计,并且对每个模块运行流程进行了详尽的描述和介绍,同时对系统进行了实现。该改进模型解决了用户跨越访问单点登路问题,具有很好的安全性与普通性。
教育期刊网 http://www.jyqkw.com
关键词 :SAML;单点登录;Pull模型;Push模型
中图分类号:TN911?34;TP315 文献标识码:A 文章编号:1004?373X(2015)16?0038?04
收稿日期:2015?05?14
0 引言
随着网络技术的广泛应用,人们的日常生活都离不开对网络应用系统的使用。所有系统都要求用户在其系统内注册独立的账号,并通过应用系统本身的验证机制对用户的身份进行检验。大量的用户账号,难免会有安全性的隐患。而且,很多应用系统的密码直接使用HTTP POST 明文传送,更降低了网络信息的安全性。对于应用系统管理人员来说,需要加大维护用户身份信息和独立的授权信息,还要经常性地添加一些新的安全项目。
对于这种情况,应用系统提供方和用户都急需一种方便快捷、安全性强的技术。所以找到一种只需身份认证一次就可登录到多个应用系统的认证方式成为如今研究的焦点。因此,针对网络系统易用性和安全性这两个很难共存的矛盾特性,人们提出了单点登录技术(Single Sign On,SSO)这一概念。
1 SAML 单点登录相关技术
1.1 单点登录技术
单点登录(Single Sign On)是目前比较流行的企业业务整合解决方案之一。单点登录技术模型如图1所示,当用户第一次访问应用系统a的时候,会被重定向到认证系统中进行验证;然后认证系统对登录信息进行身份验证,如果通过验证,返回给用户一个认证的凭证;用户再访问别的应用时,应用系统接受到请求之后会把身份凭证送到认证系统进行验证,检查身份凭证的合法性。如果通过验证,用户就在不用再次登录的情况下访问应用系统b。
1.2 SAML模型
安全声明标记语言(SAML)是由OASIS(高级结构化信息标准组织)批准,成为基于XML实现Web站点之间互操作的安全访问控制框架体系和协议。
SAML 域模型包括凭证收集器、认证实体、会话实体、属性实体和策略决策点。这些实体都为单点登录提供服务。
凭证收集器:收集用户身份凭证作为系统验证对象;认证实体:生成认证断言;会话实体:负责维护会话状态;属性实体:生成属性断;属性仓库:存储属性断言;策略仓库:存储策略;策略决策点:为自己或其他请求授权的系统实体做出授权决策。
2 SAML 单点登录模型研究
2.1 基本模型及安全性分析
基于SAML单点登录框架有3个实体组成,分别为:主体,即用户,发出访问请求;源站点,负责检验用户身份,提供给用户身份凭证;目标站点:提供和保护用户所需的信息。
传统的基于SAML 单点登录的模型有:Pull 模型(如图2所示)和Push模型(如图3所示)。
在Pull模型中,源站点为主体生成令牌来让目标站点使用,这样导致SAML 认证声明不会在随主体传输,而主体常常是最容易被攻击的实体,所以增加了系统的安全性。但每次向新的目标站点申请服务时,Pull模型新的目标站点都要向源站点发出请求,而源站点就不得不为主体管理不同的令牌,大量的请求就会造成系统的阻塞,导致各种服务不能正常运转。
在Push 模型中,源站点请求目标站点为主体生成令牌,而目标站点也维护和管理令牌,这样管理令牌的工作就由各个目标站点来完成,大大减少了源站点的压力,不容易出现网络堵塞。但是由于SAML认证声明会随着主体进行传输,导致Push模型安全性方面不如Pull模型。
这2 种单点登录模型在用户认证身份的时候都只进行了一次,但每次进行新的访问时,Pull模型中用户SAML令牌是源站点针对目标站点的请求产生的,然而Push 模型中用户SAML 令牌是目标站点针对源站点发出的请求来产生的。虽然这2个模型组织构成是一样,但是顺序流程不同。这2个传统的单点登录模型系统有着以下问题:
(1)用户每次想要登录一个新目标站点时,这个目标站点就与源站点交换信息,这个过程非常繁琐,经常性的信息交换也容易产生安全性问题。
(2)目标站点和源站点的信息交互造成互相依附性,不能够灵活的部署。
(3)这2个模型都需要2个站点其中1个来维护用户的令牌,如果短时间内维护了大量用户令牌或者令牌请求,那么很容易造成网络阻塞,甚至服务器崩溃等问题。
2.2 改进的模型
根据这2 个模型的分析,要根据不同环境选择模型,如果有多个目标站点Push 模型更好一些。但是本文要实现一个更安全的单点登录系统,所以提出了一个改进型模型,见图4。
改进后的模型有以下几个优点:
(1)主体访问目标站点不再需要2 个站点间进行信息交流,简化的登录流程和信息传输。
(2)源站点颁发的SAML 令牌可以被所有信任域内的目标站点解析查看,这样使得2个站点更加的灵活和独立,减少了部署的难度。
(3)由主体用户去维护SAML断言令牌,减少了源站点和目标站点的维护压力。
3 系统的设计与实现
3.1 体系框架设计
基于改进模型的SAML单点登录系统主要由3个大模块组成,分别是信息安全传输处理模块、客户端和服务器端。图5是整个系统的体系框架。
(1) 信息安全传输处理模块。该模块主要有是3 个功能,XML加密解密、XML数字签名产生与验证和XML 信息组装成SOAP 消息发出。XML 数字签名能够保证数据的完整和可验证性,XML 加密用来保证信息的安全性,SOAP消息最为载体将信息发送出去。
(2)客户端:接收用户信息,产生SAML请求,解析SAML令牌,根据SAML授权信息向用户提供对应服务。
(3)服务器端:根据客户端通过用户发来的SAML请求生成SAML 断言,在对断言进行加密签名产生SAML断言令牌,在将令牌通过用户发送给客户端。
这个系统授权管理放在了客户端里而不是服务器端,主要有下面的几点考虑:
(1)目标站点应该是分布式的,所以目标站点互相间应该有很强的相互独立性,应对外界访问权限应该能够自主决策。
(2)这种设计使得系统更加灵活的部署和拓展。
(3)若授权管理模块处在服务器端,用户想要访问一个新的目标站点,就要先到服务器端进行再次授权,再返回到目标站点。这样增加了步骤,降低了系统效率。
3.2 传输模块设计
在基于SAML的SSO系统中,传输模块是每个节点相互连接的基础。将XML 消息组装成SOAP 消息或者从SOAP 中提取XML 消息,然后经过HTTP 协议传递SOAP信息。整体系统的传输机构如图6所示。
传输模块主要由类.TransportMsg 来实现。Public Document Receive(HttpServletResponse HttpRequest),该方法用于站点接收到网络中传输过来的HttpServle?tRequest对象,并从其中提取SOAP 消息,然后从SOAPEnvelope中提取SOAP Body,并将SOAP Body的根元素转换成Document对象,返回断言请求消息的Document对象。这个方法实现了信息转换和通信的请求与应答过程,传输模块封装了底层消息和HTTP 连接协议,提供给最上层应用程序简明的消息传输体系。
3.3 信息安全处理模块设计
与传输模块一样,信息安全处理模块如图7所示,也是通用模块,需要同时部署到SSO客户端和服务器端。
信息安全处理模块主要由以下2个类来实现。(1)安全处理类XMLFile。XMLFile类可以对任何XML 文档以及文档中的任意指定部分进行安全处理。对于本系统,安全处理模块使用在SSO 服务器端和SSO客户端中,这对XMLFile类本身并没有影响,惟一不同的是2个站点使用的XML文档和密钥不同。
(2) 加密,数字签名类MD5Encrypt。MD5Encrypt类是开源的加密应用程序,MD5 是一种散列式加密算法,具有高速、安全、高效等特点。由于JDK7工具包中自带这个加密算法类库,所以本系统应用这个进行加密和数字签名。
3.4 SSO服务器端设计与实现
根据SAML单点登录的系统总体架构,SSO 服务器端模块如图8所示,包括SAML解析器、身份认证模块、SAML断言生成器模块和用户数据库。
(1)用户通过信息安全传输模块将身份信息一些标识性信息发送到SSO服务端。
(2)SAML解析器对消息进行解析,提取用户信息,并发往身份认证模块。
(3)身份认证模块对解析后的信息进行验证并将信息与用户身份库信息进行对比确认。
(4)根据对比确认判断用户信息合法性,然后提取库中的用户属性信息最后将这些属性信息提交给SAML断言生成器,为用户生成SAML断言令牌。
(5)SAML断言生成器将SAML令牌发送到信息安全传输处理模块进行处理返回用户实体。
其中SAML 解析模块由SAMLRequest 类实现。SAML解析模块从SAMLRequest所包含的Query对象中取出其中所包含的用户身份信息。解析请求的方法通过对SAMlRequest 的解析,返回一个包含用户信息、属性信息和标识信息的HashMap对象,进而可以从中提取出信息。身份认证模块使用用户名和属性信息对用户身份进行验证,并通过查询数据库中用户的资源返回资源列表。
SAML 断言生成模块的实现由samlsso.saml包中的很多类来完成的:
SAMLResponse:继承了BaseResponse类,可以包含多个Assertions;SAMLAssertion:该类表示一个完整的断言,即SAML令牌;SAMLAttribute:属性类,包括属性名、属性值和命名空间等,用以表示某种属性的名称和属性值等信息;SAMLStament为抽象类,是所有声明的公共基类。
3.5 SSO客户端设计与实现
在客户端中对于普通用户可以使用原有Web站点自有的登录模块登录,使用Web 服务。对于单点登录用户,首先用户发送请求经过信息安全传输处理模块发送到认证代理(SAML解析器),经过解析将用户信息和SSO服务器身份,提交给授权模块。授权模块收到用户信息后,与用户权限库信息进行比对,根据用户信息权限提供Web服务。认证代理模块的实现的部分类如下:
Public User getUserlnfo(Document doc),该类的作用是根据doc 对象取得用户的属性信息,返回用户对象。Public Identifier getldentifier(Document doc),该类的作用是根据doc对象取得用户添加的标识信息,返回标识对象。Public Static User getUser(SAMLResponse response),该类主要用于从SAML令牌中解析用户属性信息。Public Static Boolean verifyUser(User portaluser,User serveruser),该类主要用于检查从doc 对象中获得的2 次User 对象是否一致。Public Static Boolean veri?fy7Identifier(Identifier idportal,Identifier idsp),该类用于检查从doc中获得的标识信息是否与SP需要的一致。
授权管理模块:使用Java来实现认证和权限分配。将所有认证和权限分配部分打包,对外只提供API,这样既方便了开发的调用,又使得不同服务之间的授权管理能够实现统一,并且方便管理维护。
授权管理对外提供API的类有:登求认证,主要实现根据用户名和密码验证用户的合法身份;密码修改,为用户提供修改密码的功能;获取菜单,取得用户所能使用的菜单;获取权限,取得用户所有权限;请求检查,对用户的HTTP请求进行检查,看用户是否有权限得到响应。
4 结语
单点登录技术是现在企业业务整合的关键技术之一;也是目前实现为了更有效地使用应用系统和管理的方法。本文中通过对基于SAML 单点登录的模型的分析,比较了Pull和Push模型的优缺点,提出了改进的模型。这个模型解决了用户跨域访问单点登录问题,具有很好的安全性和普适性。依据改进后的模型,利用Java开发平台给出了基于SAML 2.0规范的单点登录系统的模块设计。该系统减少了验证用户声明的通信,提高了工作效率和系统的安全性,在电子商务、电子政务等多应用系统中具有非常好的应用前景。
教育期刊网 http://www.jyqkw.com
参考文献
[1] 尹星.基于SAML的单点登陆模型及其安全的研究与实现[D].镇江:江苏大学,2005.
[2] HUGHES John,MALER Eve. Technical overview of the OA?SIS security assertion markup language (SAML) [EB/OL].[2005?05?11]. http:// www. oasis?open. org/committees/doc?uments.
[3] NIE Fengming,XU Feng,QI Rongzhi. SAML?based single sign ?on for legacy system Automation and Logistics(ICAL) [C]//2012 IEEE International Conference on Digital Object Identifier.[S.l.]:IEEE,2012:470?473.
[4] 陈天玉,谢冬青,杨小红,等.基于SAML与XKMS的安全单点登录认证模型的研究与实现[J].计算机应用研究,2010(3):1019?1021.
[5] 高昊江,肖田元.基于SAML改进的单点登录模型研究[J].计算机工程与设计,2011(3):827?829.
[6] 韩伟,范植华.基于SAML的单点登录技术在Web服务中的应用研究[J].计算机工程与设计,2005(3):634?636.
作者简介:付影平(1973—),男,助理工程师。研究方向为计算机网络安全。