APP下载

基于CAS协议单点登录系统的改进与实现

2020-07-29赵侃侃戴佳男

计算机与网络 2020年9期

赵侃侃 戴佳男

摘要:单点登录(SSO)技术已成为现今Web应用系统广泛采用的集中认证授权技术,在比较分析了4种典型的单点登录实现方案的基础上,选择并改进了基于CAS协议的单点登录系统。由于前后端分离开发部署的Web应用不能直接使用CAS协议的单点登录系统,改进并重新封装了基于CAS协议的单点登录系统客户端插件,使之既能支持前后端分离开发部署的Web应用,也能支持前后端集中开发部署的Web应用直接使用而无需应用修改代码,实现了应用的无侵入性集成CAS協议的单点登录系统功能。

关键词:单点登录;Web应用;CAS协议

中图分类号:TP393文献标志码:A文章编号:1008-1739(2020)09-68-4

0引言

随着B/S架构的Web应用系统越来越广泛地普及和发展,“一次验证,多次登陆”的单点登录技术[1]也应运而生。单点登录技术是用户只登录一次,就可以访问所有接入单点登录服务的应用系统的技术。通过建立一个集中的认证服务器,并在应用系统中配置请求拦截器等方式验证用户的登录状态并控制请求的跳转功能,从而实现单点登录功能。单点登录功能不需要用户记忆各大应用系统的不同的用户名和密码,减少了用户在多个系统间登录的操作。另外,单点登录技术抽取了用户认证和授权功能,第三方接入单点登录服务的Web应用系统将认证授权功能交由单点登录系统处理,这样有助于第三方应用更加专注自身业务的设计和开发。对于多套应用系统的企业来说,单点登录功能也被很多企业,尤其是国外的相关企业采用,这是作为应用系统设计初期就必须具备的基本功能[2]。

1常用单点登录方案

目前常用的几种单点登录协议有基于SAML协议的单点登录方案[3]、基于Kerberos身份认证机制的单点登录方案[4]、基于Passport协议的单点登录方案[5]及基于CAS协议的单点登录方案[6]。

SAML是一种基于XML标准的安全断言标记语言,用于安全传输声明。SAML主要作用包括认证声明、属性声明和授权声明,但是SAML协议的单点登录方案应用起来较为复杂,并且代码没有开源,改造十分困难。Kerberos协议是由MIT为Athena项目设计的身份认证系统,但该协议只认证不鉴权。基于Passport协议的单点登录是由微软公司运行的一种Web服务,通过在浏览器端设置Cookie的方法实现单点登录功能。基于Passport协议的单点登录能够集中通过微软认证的第三方应用,并储存用户登录信息(如用户名和密码),但该方案目前代码没有开源,使用该Passport服务仍需收费。基于CAS协议的单点登录方案是由耶鲁大学发起的一个企业级的单点登录系统,该项目于2001年开始,迄今已经发展到6.X.X版本,在GitHub上不断地完善和升级。该项目使用Java语言,采用Spring Web Flow等技术,支持CAS,REST等协议。该协议配置应用简单、代码结构清晰、使用改造成本低,因此基于该协议的单点登录方案已被广泛采用。

2基于CAS协议的单点登录

2.1 CAS协议单点登录认证原理

基于CAS协议的单点登录系统通过在Cookie中存储登录凭证CASTGC,并在服务端存储用户登录后生成的临时和持久票据信息实现单点登录功能。CAS协议提供的客户端插件基于过滤器的实现原理,在传统前后端集成在一起的应用中易于使用,当用户未登录或登录失效时,可直接通过服务端重定向至登录页面。

基于CAS协议的单点登录系统中,只有服务端才能获取用户的用户名、密码等安全信息,第三方接入的应用系统没有登录入口,只接收服务端的间接授权。间接授权通过令牌实现,服务端验证用户的用户名和密码是否匹配,匹配后创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个应用系统,若应用系统拿到令牌,即得到了授权,局部会话即可创建成功,此过程就是基于CAS协议的单点登录验证原理,如图1所示。

用户访问应用系统1时,应用系统1发现用户未登录,跳转至CAS服务端,并将该用户访问应用系统1的地址作为参数传入。CAS服务端检测到用户未登录,将浏览器页面跳转至登录页面,用户输入用户名、密码提交申请至CAS服务端进行认证,认证校验成功后,创建用户与CAS服务端的会话,该会话为全局会话,同时创建授权令牌,CAS服务端将携带令牌跳转至用户最初的请求页面。

应用系统1拿到令牌后,至CAS服务端校验令牌是否合法,校验有效后将结果返回给应用系统1,应用系统1将使用该令牌创建与用户的局部会话,并跳转至登录后的页面。当用户再次访问应用系统2时,应用系统2发现该用户未登录,将用户访问的应用系统2的地址作为参数一起发送至CAS服务端,CAS服务端发现该用户已登录过,则带着令牌跳转回应用系统2,应用系统2拿到令牌后再发送给CAS服务端校验令牌有效性,令牌若有效,用户即可访问应用系统2的页面,无需再次登录。

2.2存在的问题

随着前后端分离开发部署模式的不断兴起,越来越多的Web应用选用前后端分离的模式进行开发部署,前后端之间的交互仅通过REST接口,主要好处是便于降低前后端代码间的耦合度、部署和维护,以及后端项目的拓展升级。但针对这种前端和后端之间只通过接口进行交互的Web应用,如果使用传统的CAS协议单点登录功能,后端则无法直接控制前端进行重定向,必须通过接口的方式通知前端进行重定向的动作以及重定向的URL,前端再通过解析该接口的内容进行跳转。

虽然前后端分离Web应用已逐步流行,但传统的前后端集中部署的模式仍然占有很大的比例,因此,需要改进传统的基于CAS协议的单点登录系统,使之既能支持传统模式的Web应用,也能支持前后端分离部署的Web应用。

3支持多模式单点登录系统

基于CAS协议的单点登录方案利用浏览器客户端进行访问的重定向和跳转,而前后端分离部署的Web应用无法直接控制浏览器的重定向和跳转,因此,该协议对于支撑前后端分离部署的Web应用完成单点登录功能存在问题。

支持多模式单点登录系统分为3部分:①CAS認证中心:用于应用的授权管理以及用户认证,集中部署在一个中心点或采用CAS服务器集群的模式进行部署;②第三方Web应用:需要连接CAS认证中心进行单点登录认证的应用,数量为一个或多个;③改进的CAS认证客户端:原始的CAS认证客户端只提供了过滤器的方法(插件模式)用于前后端集中部署应用进行单点登录认证,本文改进了原始的CAS客户端,同时提供了2种用户认证的方法,一种是原有的插件模式进行认证,另一种是接口调用模式进行认证,分别用于支持前后端集中部署应用以及前后端分离部署应用。另外,改进的CAS认证客户端还包含一个前端适配插件,用于拦截用户请求、判断是否登录、解析后端认证结果及重定向至登录页面,如图2所示。

在第三方Web应用系统配置使用模式后,可使应用系统运行于接口模式或者插件模式。在接口模式下,应用系统应首先在配置文件中配置CAS服务端URL。其次,当应用系统集成的CAS客户端接收并解析CAS服务端的返回值后,将该返回值封装成接口,再由前端插件调用该接口并解析结果后实现页面跳转等操作,完成单点登录功能,其中,CAS客户端封装的接口主要包括用户登录接口、用户退出接口、判断用户是否登录接口、获取用户信息接口及获取用户票据接口等。

如果用户未登录,CAS客户端将访问页面URL作为参数传递至前端插件,并由前端插件读取配置文件中的CAS服务端地址,并重定向至登录页面URL。如果用户已登录,CAS客户端插件会拦截该请求,从请求中获取与用户对应的标志信息并判断该请求中所携带的标志信息是否合法和有效用户是否存在有效登录信息,如果合法有效已经存在,则请求通过,并将已登录标志信息作为请求接口参数传递至前端插件。在插件模式下,应用系统直接通过CAS客户端控制前端页面的跳转实现单点登录功能,也就是传统的CAS客户端提供的功能。如果用户未登录,CAS客户端将访问页面URL作为参数直接跳转至登录页面。如果用户已登录,且判断该用户的登录信息合法后,将该标识信息设置在请求中的Cookie中传递。另外,对于使用C++或者php等非Java语言开发的应用,也可以通过接口模式进行单点登录功能接入。

4认证流程

4.1插件模式

①当用户访问APP1时,由于已配置部署模式,CAS认证中心客户端根据该模式选用过滤器的方式进行请求拦截,若APP1服务端已存在有效票据,则说明已登录,访问通过;否则,过滤器将拦截请求并重定向到CAS认证中心登录页面。

②用户登录成功后,CAS认证中心生成登录票据,同时,CAS认证中心在浏览器端的Cookie中写入登录票据ID,并根据登录票据和请求来源生成临时票据作为参数跳转回APP1。

③APP1的CAS认证中心客户端获取到临时票据后,发送至CAS认证中心进行验证。

④CAS认证中心验证临时票据后,返回登录票据。

⑤APP1的CAS认证中心客户端接收到登录票据,并重定向到原始请求链接和通过。

⑥用户首次访问另一应用APP2时,由于APP2当前没有有效票据,APP2将请求重定向至CAS认证中心判断该次请求是否已登录。

⑦CAS认证中心在接收到请求后,从Cookie中获取票据ID,并根据票据ID查找票据,验证有效票据是否存在。

⑧当票据存在时,证明已登录,APP2根据票据以及请求来源应用生成临时票据,并将该临时票据添加到应用系统的请求URL中并跳转;当票据不存在时,则会重定向至CAS认证中心登录页面重新进行登录。

⑨APP2接收到包含有临时票据的请求后,从请求链接中提取临时票据并发送至CAS认证中心验证。

上述描述了支持多模式的单点登录系统,该单点登录系统改进实现了基于CAS协议的单点登录系统。该方法通过修改和增加客户端插件和前端插件,将用户请求进行拦截和处理,而不需要应用程序修改代码与CAS服务器交互进行逻辑校验,实现了前后端分离开发部署的Web应用和前后端集中开发部署的Web应用的无侵入性集成单点登录功能。

5结束语

本文所描述的支持多模式的单点登录系统,实现了前后端分离开发部署的Web应用和前后端集中开发部署的Web应用的无侵入性集成单点登录功能,但是还需根据工作实际,进一步完善诸如完整的日志审计、日志导出功能,实现用户操作的可追溯性,提高系统的安全性。此外,票据信息的中心化存储对高并发访问条件下服务器的稳定性、可扩展性以及安全性也带来了挑战,能够支持高并发、分布式的单点登录服务器集群,提供一个更加可靠且安全的单点登录系统也是必须考虑的。

参考文献

[1]林满山,郭荷清.单点登录技术的现状及发展[J].计算机应用,2004(S1):248-250.

[2]苏悦洪.基于CAS协议的单点登录系统的研究与改进[D].广州:华南理工大学,2014.

[3] WU KX, YU XL. A Model of Unite-authentication Single Sign-on Based on SAML Underlying Web[C]// Proceedings of the 2009 Second International Conference on Information and Computing Science, 2009(2):211-213.

[4]崔培枝,王朝君,刘海燕. Kerberos认证技术研究及分析[J].计算机与现代化,2001(5):35-39,43.

[5] OPPLIGER R. Microsoft .NET Passport: a Security Analysis[J]. IEEE Computer, 2003:36.

[6]王扬,俞烽.信息系统行为审计管理[J].指挥信息系统与技术,2012,3(2):44-48.