0 引言
企业在建立信息化设计之初未曾考虑各个子系统之间的通信问题,随着时间的推移,企业所建立的信息系统越来越多,一个需要在多个应用系统之间综合操作的用户就必须设置大量的账号和密码,极易造成混淆。同时,频繁的登录操作还容易造成信息的泄露,这也将带来严重的安全隐患。对于管理者而言,需要维护多个用户数据库,管理繁琐。
为了解决上述问题,引入了企业信息门户(EIP,EntERPrise Information Portal)的概念。企业信息门户涉及用户界面集成、数据集成、业务流程管理以及单点登录系统等多个方面,其中首先需要解决的就是单点登录系统(SSO,Single Sign On)的实现。作为用户而言,只需进行一次主动的身份认证,随后就能方便地访问所有被授权的数据资源而无需再次认证。作为管理者而言,只需维护少数几个信息数据库,从而提高了系统的可维护性和整体安全性。
现有的SSO解决方案有微软的Passport、IBM的WebSphere Portal Server以及Liberty等。这些方案虽然都能够实现单点登录功能,但各系统分别有着不同的侧重点而且对系统架构有着严格要求。根据上述分析,本文提出一种更具灵活性和安全性的单点登录解决方案,能够根据Web服务应用耦合程度不同进行安全域划分,用户在某一域内跨站点访问数据时,采用Web应用间传递票据的方式进行认证;而用户如需要跨域进行访问数据时,则需要通过更严格的加密Cookie共享机制进行认证。这种动态认证策略既缓解了认证过程的复杂性,又保证了系统的整体安全性。
1 基于安全域的单点登录模型概述
1.1 安全域相关概念
安全和信任已成为Web服务的重要需求之一,针对这一问题,本文提出一种新的安全域概念。一个安全域中的Web应用必须是相互关联且相互信任的,在逻辑和管理意义上处于同一域,并且在同一个安全域内实施相同的本地安全策略。
目前,安全域的划分方式主要包括按业务划分和按安全级别划分。企业信息门户系统的用户经常要求在多个相关的业务系统之间请求数据,最理想的办法是将现有系统按业务划分安全域,每个安全域承担相关的一类信息服务。这种划分方法对系统改动最小,划分形式最简单,最容易实施,同时又保证了域内访问的高效性以及跨域访问的安全性。
1.2 基于安全域的单点登录模型
现有的单点登录系统无论在灵活性还是安全性上都无法同时满足企业信息门户系统的现实要求,针对此问题在上述技术分析的基础上提出一种基于安全域的单点登录模型。根据请求访问同一域内的业务和请求跨域访问分别提出了两种不同级别的认证机制,模型结构如图1所示。
图1 基于安全域的单点登录模型整体架构
由图1可知,基于安全域的单点登录模型主要包括企业信息门户,认证中心以及划分了安全域的众多业务系统。安全域是依据业务系统的服务类型划分的,而与各个业务系统的实际地理位置没有关系,图中将同域的各业务系统放置在一起只是逻辑意义上的,真正区别业务系统所属哪个安全域则是依据业务信息表中标注的安全域ID。
2 基于安全域的单点登录系统设计
根据上述提出的模型,给出单点登录系统各模块的设计细节,主要包括企业信息门户和认证中心两大模块。基于安全域的单点登录分为单域登录、域内跨站点访问和跨域访问,分别给出其流程细节。
2.1 系统各模块的设计细节
2.1.1 企业信息门户
企业信息门户对所有用户提供统一的单点登录入口和登录验证,并提供所有业务系统的链接。用户首次访问业务数据时会被要求向认证中心提供用户名和口令进行验证。其中,用户名被映射为一个能被所用应用系统识别的ID号,如果通过验证,就会返回用户请求的业务数据,而内部的验证过程对用户是透明的。
2.1.2 认证中心
认证中心是整个系统的中心,具体由LDAP服务器,Cookie服务器和认证中心服务器组成。主要用于向用户提供注册服务,向所有业务系统提供认证服务,同时向用户提供统一的调用接口。对各服务器重要功能分析如下。
(1)LDAP服务器
LDAP全称为Lightweight Directory Access Protocol,是一个轻量级目录访问协议。该协议是基于X.500标准的,与X.500不同的是LDAP支持TCP/IP,这对访问Internet来说是必须的。LDAP实际上是一种特殊的数据库,与一般数据库不同,LDAP对查询进行了优化,特别适用于查询和更新操作密集型的服务。正因为如此,LDAP用于单点登录系统中用户信息的存储效率极高。认证中心每次得到认证请求后都要访问LDAP服务器中的用户信息表,具体如表1所示,根据用户当前信息判断用户的权限,从而决定是否对用户的请求授权。对于用户的每次访问,认证中心还要及时更新用户信息表中的动态表项,为下次认证提供依据。
表1 SSO-USER信息表
单点登录用户信息表记录了USER_LEVEL,根据用户的级别来裁定用户是否有访问某个业务系统的权限。用户的LOGIN_TIME用于记录用户首次登入系统的时间,根据当前时间和LOGIN_TIME进行运算得出的时差来判断用户是否仍在权限有效期内。而LOGOUT_TIME用于记录用户登出的时间,如果LOGOUT_TIME早于LOGIN_TIME则可以判定用户仍处于登入状态;反之用户已经登出系统,如需访问业务系统必须重新登录。TOKEN_ID是用户成功登录后系统分配的随机登录票据,是用于记录用户状态的唯一标识和凭证。TOKEN_ID会被存入认证中心的Cookie中,即使用户进行跨域访问业务数据,也有一种统一的办法获得此票据。LAST_SERVICE记录了用户访问的最后一个服务,当用户再次访问其他服务时此字段会被验证,用户每次注销后,LAST_SERVICE的值都会被清空。LAST_SERVICE将被作为外键和用户当前要访问的安全域业务表相关联,安全域业务信息表如表2所示。如果用户这次要访问的服务与上次访问的服务处于同一安全域,则会通过验证和授权。如果当前安全域的业务表中不包含上次访问的服务,则会通过查证Cookie服务器中的相应Cookie来进行更严格的验证。
表2 安全域业务信息表
安全域业务信息表中,SERVICE_ID用于唯一标明业务服务,DOMAIN_ID用于区分此项业务服务属于哪个安全域。ACCESS_LEVEL规定了此信息服务的访问权限,对应于SSO_USER表中的USER_LEVEL,只有用户级别高于或等于本业务服务的ACCESS_LEVEL才能有权限访问。
(2)Cookie服务器
Cookie服务器用于生成和更新用户访问业务信息系统所产生的Cookie。Cookie通常是伴随着用户请求和页面响应在服务器和浏览器之间传递。在采用Cookie来保存用户浏览信息时,所有的信息都是存储在客户方,并且是以明文方式存放。这对于安全性要求很高的单点登录系统来说存在着严重的安全隐患,不能直接将普通的Cookie应用于系统设计。
基于安全域的单点登录系统提出了一种能够提供跨域访问的加密Cookie解决方案。Cookie服务器中为每个安全域设置一个域Cookie文件,具体记录了所有用户对本安全域内业务信息系统的访问信息。其中应包含Cookie ID编号,作为Cookie文件检索的标识;安全域编号Domain ID,用以表示属于哪个安全域;所有用户的访问信息,包括对应用户的IP、所访问的业务信息系统;还应包含Cookie的生成时间和有效期限。
由于域Cookie用于保证用户能够获得跨安全域访问的授权,各安全域对相应Cookie的加密方式各不相同,都有自己的一对公开加密密钥和保密解密密钥。Cookie服务器在向客户浏览器发布摘要Cookie之前会使用产生此Cookie文件的安全域的加密密钥对其进行加密。而用户下次访问业务信息系统时会提供自己的Cookie文件,如果此安全域正是产生用户提供的Cookie的安全域,则业务系统能使用自己的解密密钥对其解密并获得其中的认证票据信息,否则无法对其解密。
(3)认证中心服务器
认证中心服务器能够接收来自各个安全域的认证请求,管理着用户的全局信息数据库,负责用户的登录,认证,授权和登出等操作。认证中心服务需要访问存放于LDAP服务器中用户表,以完成用户的登录验证。当某安全域向认证中心提出认证请求时,认证服务器会首先查看用户信息表,验证用户是否已登录,是否有访问此业务服务的权限,以及是否访问过同域的业务服务。当认证中心认定用户是以跨域的形式访问时,会向Cookie服务器提出验证请求,查找用户的访问记录。每次访问后,认证中心还要更新LDAP服务器和Cookie服务器中相应的数据。
2.2 基于安全域的单点登录流程
2.2.1 单域登录流程
用户在首次登陆系统时访问业务服务系统A1,其登录流程如图2所示。对其流程的详细描述如下。
图2 单域登录流程
(1)用户首次访问安全域A中的业务服务系统A1,请求相应的数据。
(2)业务服务系统A1并不马上对用户提供的Cookie进行解密(有可能用户根本就没有业务服务系统A1的Cookie),而是向认证中心提起认证请求。
(3)认证中心通过查看LDAP服务器中此用户的信息表得知用户尚未登录系统,因此将告知门户系统未通过认证。
(4)门户系统将登录页面返回给用户,要求用户提供用户名和密码等登录信息。
(5)用户将输入的用户信息提交给认证中心,认证中心通过对比LDAP服务器中的用户信息得知用户是合法的。然后会更新用户信息表中的LOGIN_TIME为当前时间,并分配给用户一个随机TOKEN_ID。
(6)最终,认证中心将认证结果与包含使用安全域A的公开密钥加密过的票据一同提供给业务服务系统A1。A1收到验证结果后会使用安全域A的解密密钥将票据解密,从中读取验证结果。
(7)A1通过验证票据信息合法,决定向用户提供所请求的数据。与数据一同传递给用户的还包括这次数据访问经过安全域A的加密密钥加密的Cookie文件。
(8)同时,A1还会更新认证中心的相关数据,这包括将LDAP服务器中最近访问数据的用户信息表中的LAST_SERVICE改为A1,同时将此次用户访问信息添加到Cookie服务器内安全域A的Cookie文件中,具体的内容应和传递给用户的Cookie文件完全一致。
图2所示的首次访问流程过后,认证中心有了此用户的一次访问记录,而用户浏览器也有了一份加密的Cookie文件,其中包含了认证票据和当次访问的记录。这些信息都给用户再次访问安全域A中的其他服务提供了参考依据。
2.2.2 域内跨站点访问流程
假定刚访问过安全域A中业务服务系统A1的用户又要访问同一安全域中的业务服务系统A2,此次访问属于域内跨站点访问,具体流程如图3所示。对其分析阐述如下。
图3 域内跨站点访问流程
(1)用户请求访问安全域A中的业务服务系统A2,并向其提供访问过A1的Cookie文件。
(2)业务服务系统A2并不立即试图对其解密,而是请求认证中心认证用户的权限。
(3)认证中心通过查询用户信息表中的USER_LEVEL字段的值得知用户有权限访问A2,并且上次访问过的服务为同域的A1,此时认证中心不必查看安全域A的Cookie文件,直接将授权用户访问的认证结果返回给A2。
(4)A2收到认证中心的认证结果后仍会对用户提供的Cookie文件进行解密,从中获取票据,验证后向用户传递所访问的数据,同时传递此次访问服务的加密Cookie文件。
(5)此后,A2还要向认证中心提交此次用户的访问信息,供认证中心更新数据。其中包括将用户的LAST_SERVICE改为A2,将传递给用户的Cookie文件内容更新到安全域A的Cookie文件中。
经过此次访问,认证中心仍然只有用户对安全域A的访问记录,而用户的浏览器Cookie中也只有两次访问安全域A中业务服务的记录。由于不同安全域采用的安全策略的不同,这些信息都不能作为用户访问其他安全域的依据。
2.2.3 跨域访问流程
用户已经成功登录SSO系统,并且成功访问了安全域A中的两个业务服务系统A1和A2。现该用户需要访问安全域B中的业务服务系统B1,这属于跨域访问,具体流程如图4所示。与域内跨站点访问相比,跨域访问的流程大体相似,只有某些步骤的实际实现方式的不同,并没有过于复杂的过程,也不涉及其他域,同时能够保证系统的安全性。
图4 跨域访问流程
由图4可知,跨域访问流程叙述如下。
(1)用户请求访问业务服务系统B1,并向其提供Cookie文件(只能获取Cookie ID)。
(2)业务服务系统B1向认证中心提起认证请求,并将用户提供的Cookie ID传递给认证中心。
(3)认证中心首先查看LDAP服务器中该用户的信息表,得知用户已经登录系统,用户级别高于B1的访问级别。然后认证中心会通过用户提供的Cookie ID检索Cookie服务器中用户的访问记录,并将其通过安全域B的公开加密密钥而加密为一个摘要Cookie文件,其中包含有此次认证的票据和权限认证结果。最终,将生成的Cookie文件传递给业务服务系统B1。
(4)业务服务系统B1用自身的保密解密密钥对收到的Cookie文件进行解密,从中得知认证成功。然后,会将用户请求的数据和包含本次访问记录的加密过的Cookie文件一同返回给用户。
(5)之后,业务服务系统B1还会向认证中心提交此次用户访问的记录。认证中心会依此将用户的LAST_SERVICE改为B1,并将传递给用户的Cookie文件更新到Cookie服务器内的安全域B的Cookie文件中。
依照上述流程,使用和域内访问相似的步骤就实现了跨域访问,与其他跨域访问的实现方案相比,认证快捷高效。同时,通过LDAP服务器和Cookie服务器进一步保证了认证过程的安全性。
3 关键技术与性能评价
3.1 用户权限管理和认证技术
用户对任何业务服务系统的访问都需要获得认证中心的认证,否则没有权限获取所需数据。同一用户在不同业务服务系统中的权限是不同的,更不能任意进行跨域访问。所有这些权限的管理问题都是通过LDAP服务器中的用户信息和Cookie服务器中的Cookie文件进行管理的。
系统中使用Web Service技术对认证服务进行封装。Web Service是一个独立的,基于标准的分布式组件技术。这是基于Internet标准和XML技术来实现的。Web Service能在客户端和业务服务系统之间实现一种松耦合关系,通过XML/SOAP实现消息交换;WSDL对服务进行描述;UDDI对服务进行注册。
根据系统需要,使用SOAP借助UDDI注册中心提供的接口发出服务请求。UDDI注册中心为Web Service创建服务描述文件WSDL和获得服务入口地址,并返回给系统。描述文件包含对消息的数据结构,端口类型,通信协议的具体描述。
3.2 安全性能评价
本文将安全域的概念用于设计企业信息门户的单点登录系统,与其他框架下的系统设计相比具有以下性能优势:
(1)认证过程中使用的票据(Token)是由用户信息和票据产生时间经过连接后生成的,由于用户的请求行为是随机的,票据的真正内容实际上也是随机产生的,这防止了票据的伪造和破解。不仅如此,票据产生后还会采用公开的加密算法进行加密,只有对应安全域的保密密钥才能对其进行解密,从而保证了票据传输过程中的安全性。
(2)由于跨域访问时用户提供的Cookie无法被当前域解密,因此必须请求认证中心在验证用户身份后返回一个能被当前域解密的Cookie文件,这是在Cookie服务器中的安全域Cookie文件的帮助下实现的。
(3)认证过程中安全信息的交换频繁进行,保证信息传输的机密性和完整性对于单点登录系统则至关重要。认证中心和各安全域之间的信息交换是基于SOAP协议的,这是一种基于XML的数据格式,能够由WS-Security规范来保证,满足系统端到端的安全级别要求。SOAP中使用的是基于XML Encryption的加密技术,能对消息的部分或全部内容进行加密。加密后的XML文档可传递到相应的安全域,对应安全域只能解密与此相关的文件内容,而其他安全域的信息仍是保密的。
4 结束语
本文介绍了一种企业信息门户的单点登录系统的实现,系统实现了基于安全域的单点登录和跨域访问。解决了SSO系统不能实现Cookie跨域共享的问题。通过采用LDAP服务器和Cookie服务器保存用户的信息和访问记录,对用户的域内访问和跨域访问采用不同的认证机制,既保证了系统的安全性,又实现了认证过程的高效性。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文网址:http://www.toberp.com/html/consultation/10839414453.html