跨域单点登录解决方案研究
2018-02-26伍孟轩易叔海
◆伍孟轩 李 伟 易叔海 程 蒙 刘 川
跨域单点登录解决方案研究
◆伍孟轩 李 伟 易叔海 程 蒙 刘 川
(武汉虹旭信息技术有限责任公司 湖北 430200)
为了解决跨域系统集成、子系统技术逐步升级以及多个子系统需要多次登录的问题。本文结合目前所针对的业务系统特点,提出一种以HTTP、随机验证码(RIC:Random Identififying Code)、票据(ticket)、加密票据(mticket)和一次性验证票据DVP(Dispos-able verification paper)、业务应用Session和本域Cookie为核心的跨域单点登录解决方案,该方案以地址重定向的方式请求单点登录服务器验证用户信息并生成ticket、RIC、mticket以及指向RIC的DVP信息,并将对应信息保存到数据库。然后系统携带ticket和DVP信息重定向到目标应用,并通过嵌入应用中的单点登录客户端解析相应的票据、更新销毁DVP并获取登录信息。获取登录信息后即可从独立共享的资源访问机制中获取授权信息,进而保证系统一次登录便能访问所有子系统受限资源。
单点登录;Cookie;票据;跨域;认证
0 引言
随着技术的逐步发展,企业对自身信息化程度要求不断提高,为保证已有系统正常运行的情况下同时引入新的功能模块,企业面临遗留系统升级改造、新系统开发、第三方系统集成等问题。为了保证已有系统正常运行,企业选择对遗留系统采取逐步升级方案,同时由于企业信息化的迫切需求,新系统的开发和第三方系统集成必须同步进行。在独立于原有系统的基础上研发新系统一般都会涉及开发一套新用户权限认证机制,多套权限认证机制会导致用户需要记录多个用户名和密码,这样不仅会增加了用户负担而且使用户密码泄露的概率增大,更重要的是极大的降低了用户的工作效率并导致信息系统孤岛问题。为了提高用户工作效率、解决信息孤岛联通和用户信息安全问题,单点登录是面对企业信息化发展的必备解决方案。
单点登录SSO(Single Sign-On)指用户访问部署于不同服务器的多套业务系统时,用户只需要登录一次系统进行权限认证便可访问所有被授权的系统受限资源而不需要在多套系统中进行权限认证。
目前,市面上存在一些开源单点登录解决方案,如CAS[4-5]单点登录。该方案能较好的实现单点登录,但同时存在一些问题。CAS单点登录是使用Spring Webflow+springMVC构建的一种通用重量级、有状态单点登录架构模型,同时,对于分布式系统集成也存在较大的学习成本。此外相关文献也提出了各自的单点登录方案,文献[7]提出了一种基于票据的跨域单点登录,实现登录信息通过加密网络传输完成系统登录认证。文献[8-9]提出了基于cookie保存票据的跨域单点登录认证方案。文献[10]提出了一种基于地址统一资源定位器重定向的解决方案,将信息参数以明文附加在URL的后面,实现不同应用程序之间共享用户信息。
基于对SSO模型分析并结合业务应用特点,本文基于HTTP、RIC、ticket、mticket、DVP、业务系统Session和本域Cookie的综合优势提出一种适合于自身业务系统的轻量级权限认证方案。
1 总体架构
跨域单点登录总体方案如图1所示,系统包括客户端、单点登录服务器、门户管理子系统、web应用、认证授权数据库和单点登录客户端。
1.1门户管理子管理系统
门户管理子管理系统包括系统登录界面、权限管理模块以及一些公用的系统模块。本方案中重点在于关注系统登录模块,而权限管理等模块可根据具体的实施方案确定;门户管理子系统登录界面提供访问所有业务系统的统一入口,并为用户提供用户名和密码承载界面以及认证请求的提交入口。
1.2认证授权数据库
认证授权数据库用于存储门户管理子系统所涉及到的相关资源信息的存储和单点登录服务器生成的标识信息。认证数据库存储信息具体包括:用户注册信息、资源信息、资源授权信息和认证服务器生成的标识信息。
1.3单点登录服务器
单点登录服务器属于系统认证核心功能。按照登录验证规则,可以将单点登录服务器分解成如下功能:用户身份认证规则、RIC生成规则、Ticket生成规则、DVP生成规则、mticket生成规则、DVP与RIC映射规则以及有效标识数据存储、Ticket定期校验、系统登出。
1.4单点登录客户端
单点登录客户端嵌入门户管理子系统和Web应用中,用于请求重定向、请求转发以及根据处理请求中携带cookie、mticket或者ticket、DVP信息,从而确定系统是否处于登录状态。
1.5 web应用
web应用即目标应用,授权用户能够访问目标应用并进行相应的业务操作,比如:数据搜索、数据录入等一系列功能。
图 1 总体架构
2 详细设计
本方案中包括三个主要服务:单点登录客户端服务、单点登录服务器服务和认证授权数据库服务,单点登录客户端和单点登录服务器相互协作,共同完成跨域单点登录。单点登录客户端的功能包括:(1)根据用户请求所携带的参数判断当前用户所处状态(登录、未登录);(2)根据用户状态将用户请求转发。单点登录服务器的功能包括:(1)接收由单点登录客户端所转发的用户验证请求;(2)验证用户信息的有效性;(3)根据规则生成相应的用户标识信息,并将标识信息保存至认证授权数据库;(4)用户认证后的重定向问题。认证授权数据库服务:用于存储门户管理子系统所涉及到的相关资源信息(Web应用访问地址、用户信息、系统日志)的存储和单点登录服务器生成的标识信息(Ticket、mticket、RIC、DVP)。下面对三种服务的详细介绍:
2.1单点登录客户端
单点登录客户端作为单点登录核心服务之一,其所包含的核心规则如图2所示。单点登录服务器中的各种规则叙述如下:
(1)检测请求是否包含mticket和DVP参数:用于单点登录客户端所拦截的请求中是否具有着两个参数信息,从而判断系统是否处于登录状态;
(2)检测cookie中是否包含mticket以及SessionId参数:用于单点登录客户端所拦截的请求中是否具有着两个参数信息,从而判断系统是否处于登录状态;
(3)判断用户登录状态有效性:用于判断认证授权数据库中是否存在ticket相关信息,通过DVP寻找出RIC信息,并通过RIC对mticket进行解密以获取明文ticket;
(4)保存用户信息到session:并将sessionId和mticket存入cookie中,用于保持用户的登录状态;
(5)更新DVP:更新认证授权数据库中与mticket对应的DVP;
(6)检测请求是否携带Web应用连接(sublink)作为参数:用于判断用户是否请求Web应用;
(7)地址重定向:根据单点登录客户端的判断,做出相应的重定向动作,重定向到单点服务器或者重定向到Web应用。
图2 单点登录客户端
2.2单点登录服务器
单点登录服务器作为单点登录核心服务之一,其所包含的核心规则如图3所用。单点登录服务器中的各种规则叙述如下:
(1)用户认证模块:用于验证用户名和密码是否有效,如果无效,则地址重定向模块将单点登录客户端所转发的请求重定向到门户管理子系统。
(2)Ticket生成规则:是一种ticket生成方法;Ticket其特性是保持其在认证授权数据库中的唯一性;Ticket生成函数为:Ft=Fc+FR+Fts +Fstep,其中Fc根据系统设计的常量值,FR为数字字母随机组合,Fts为当前时间戳,Fstep为同一时间票据产生的个数值的顺序值。
(3)RIC生成模块:随机化验证码,用于将ticket信息进行加密,RIC用于后台运行,不会出现在网络传输过程中,所以使用自定义Fric函数生成字符串复杂的随机验证码,但是不一定要求RIC唯一。
(4)mticket生成模块:使用Fmt=E(Ft,Fric)生成加密mticket,其中E(Ft,Fric)为加密函数,文献[11]可以把一个随机数直接视为受高级密钥加密过的密钥。
(5)DVP生成规则:一次性验证码在网络上传输,用于在后台寻找RIC,然后通过RIC对mticket进行解密,并对比数据库中的ticket票据,从而确定系统是否处于登录状态,所以使用自定义Fdvp函数生成无规律可循的杂乱的字符串。
(6)票据信息保存:用于将标识用户登录系统状态的信息保存到数据库中。
(7)地址重定向:用于将用户请求验证通过后,生成的mticket、DVP作为访问请求链接的URL参数,请求门户管理子系统。
图3 单点登录客户端
2.3访问票据表结构
访问票据表结构用于存储经过单点登录服务器认证的有效用户信息后系统产生的与用户相关的Ticket、mticke、RIC、DVP等信息。系统通过判断Ticket是否存在而判断用户的登录状态。此外,系统通过判断数据的时间戳信息,用于确保用户登录是否处于超期。访问票据表结构属于系统结构中必不可少的,其表结构设计如表1所示。
表1 访问票据表结构
3 认证流程与系统登出
本方案提出的单点登录的认证方案,首先需要部署单点登录服务器、门户管理子系统(单点登录客户端嵌入其中)和认证授权数据库;根据总体方案搭建系统后,登录门户管理子系统配置用户信息以及用户授权信息即可实现单点登录。系统对于未登录用户(A_unlogin)访问业务应用时主要涉及三个方面的交互:(1)用户与单点登录客户端之间的交互;(2)单点登录客户端与单点登录服务器之间的交互;(3)单点登录客户端、单点登录服务器与认证授权数据库之间的交互。
3.1系统登录
以A_unlogin用户访问门户管理子系统所管理的应用为例;用户请求登录时序图如图4所示,下面结合图4描述用户登录时序图:
(1)用户访问统一门户管理子系统,单点登录客户端检查访问连接中用户是否携带mticket、DVP参数。如果没有携带mticket、DVP参数,则直接返回到统一门户管理系统的用户登录界面。
(2)在门户管理子系统登录界面输入用户名和密码,门户管理界面携带用户名和密码请求单点登录服务器。
(3)单点登录服务器将密码加密,然后与认证授权数据库中的身份信息进行对比。
(4)如果身份验证不通过,则单点登录服务器将请求重定向到门户管理子系统。
(5)如果身份认证通过,单点登录服务器通过随机化算法生成随机验证码(RIC)、通过ticket生成策励生成一个永远不会重复出现的明文ticket、根据一次性票据生成规则生成无规律可寻的DVP字符串,然后将ticket与RIC通过对称加密算法进行加密,生成加密mticket。
(6)单点登录服务器将ticket、mticket、RIC、DVP、ticket生成时间等信息存入认证授权数据库中。
(7)单点登录服务器将产生的mticket、DVP数据作为门户管理子系统URL的参数,请求统一门户管理子系统。
(8)单点登录客户端检查mticket和DVP,单点登录客户端查询认证授权数据库,通过DVP寻找出RIC信息,并通过RIC对mticket进行解密以获取明文ticket然后再通过明文ticket查找出用户信息。最后将用户信息保存在Session同时更新DVP的值和数据库中ticket的生成时间,并将sessionId和mticket信息存入本域cookie;一切正常运行后,用户即可进入门户管理子系统的首页。
(9)通过门户管理子系统访问应用A,门户管理子系统携带应用A的url(sublink)、mticket和门户管理子系统本域名的cookie信息请求门户管理子系统的业务系统。
(10)单点登录客户端通过cookie中的SessionId寻找存在业务系统的web容器中存在session对象,如果mticket和session对象同时存在,单点登录客户端将查询权限认证数据库检测mticket是否有效。
(11)如果检测不到mticket数据,则说明当前用户登录已经失效,单点登录客户端将请求重新定位到门户子系统登录界面。
(12)如果检测到mticket数据,则说明用户处于登录状态;单点登录通过mticket查询认证授权数据库以获取最新的DVP,并更新DVP信息;然后再将mticket和DVP作为应用系统A的参数请求业务系统A。业务系统A中的单点登录客户端执行(7)、(8)两个操作步骤后,即可正常登录A系统。
本方案中用户的登录认证过程是以加密票据、随机数和本域cookie组合协作作用,完成用户的权限认证。
图4 登录认证流程
3.2系统登出和系统超时
用户单点登出相对而言很简单,但是单点登录过程中必不可少的。单点登出通过携带加密票据(mticket)和一次性验证票据(DVP)请求单点登录服务器,服务器通过DVP查询出随机验证码,再对mticket进行解密生成明文ticket,然后根据明文ticket对认证授权数据库中的ticket数据进行删除。最后系统重定向到统一用户管理子系统界面。对于系统超时而导致单点登出的问题,相比较通过手动点击单点登出更为简单,系统设计者只需要在单点登录服务器中启动一个后台线程循环,检查当前时间与数据库中的ticket时间差是否超过了系统超时的预定值,如果超过了预定值,直接删除中央认证系统中的ticket,并将系统重定向到门户管理子系统的登录界面。
4 系统安全性能
4.1会话Cookie
本方案中会话cookie不会保存用户的任何敏感信息,cookie在网络上传输仅仅携带浏览器与服务器之间通信的SessionId,会话cookie中的SessionId可以寻找服务器端的Session对象,用于判断session是否已经存在。本方案中存在于内存中会话cookie被设置成httpOnly的模式并且会话cookie当浏览器关闭的时候立即失效,所以可以防止cookie被从客户端获取和修改。
4.2加密票据(mticket)、一次性验证票据(DVP)
用户请求被重定向到单点登录服务器后,单点登录服务器随机生成验证码、票据、加密票据和一次性验证票据,并且这些信息与用户名相关联。系统通过mticket和DVP登录系统,并且每次登录系统后,系统将更新上一次用于解密mticket的DVP索引失效,并生成新的DVP。DVP生命周期短暂,可以有效的防止mticket和DVP被重复利用。
5 结束语
本文分析了目前企业面临系统升级的系统登录问题,提出了一种由加密mticket、DVP和会话cookie实现一套单点登录设计方案。此方案保证了用户登录过程中系统敏感信息不会在网络上传播。同时在用户认证通过后,系统能够通过加密ticket和会话cookie直接确认系统是否处于登录状态,进一步减轻了服务器的认证压力。此外,用户信息集中式单点登录方案,使得企业所有系统共用一套权限认证机制,能够更好的应用于企业级系统升级和新系统的开发。同时,减轻了系统用户记住大量的用户名和密码以及管理员管理用户的负担,从而提高了用户访问所有可信系统的便捷性。
[1]高昊江,肖田园.基于SAML改进的单点登录模型研究[J].计算机工程与设计,2011.
[2]陈天玉,谢冬青,杨晓红.基于SAML与XKMS的单点登录认证模型的研究与实现[J].计算机应用于研究,2010.
[3]梁志罡.基于 Webservice 的混合架构单点登录的设计[J].计算机应用,2010.
[4]绍叶秦,陈建平,顾翔.改进的Kerberos单点登录协议[J].计算机工程,2011.
[5]景昌民,唐弟官.开放源码的CAS单点登录系统研究[J].现代情报,2009.
[6]沈杰,朱程荣.基于Yale-CAS的单点登录的设计与实现[J].计算机技术与发,2007.
[7]王国伟,薛曼君.基于票据的跨域单点登录.计算机应用[J],2012.
[8]刘润达,褚云强,宋佳等.一种简单的跨域单点登录的实现[J].计算机应用,2007.
[9]廖礼萍,鲍有文.基于跨域 Cookie 的单点登录系统的设计与实现[J].北京联合大学学报:自然科学版,2008.
[10]牛晓菲.基于SOA的跨域单点登录系统的研究与实现[D].北京:北京交通大学,2009.
[11]邓昀,程小辉.移动跨域单点登录系统设计[J].计算机工程与设计,2010.