| 标题 | 基于CAS的单点登录 |
| 范文 | 蔡建军 魏金津 任女尔 摘要:建设车企的单点登录系统,可以提升其用户体验,提高其使用软件的效率。为了满足车企定制化的软件业务需求而基于CAS二次开发单点登录系统。使用Apache Shiro框架去整合CAS客户端开发,可以大大提高开发效率和系统可靠性。对于企业不同的系统需要根据其具体架构使用不同的方法去集成CAS客户端。 关键词:CAS;单点登录;Shiro 中图分类号:TP319? ? ? ? 文献标识码:A 文章编号:1009-3044(2019)28-0251-05 开放科学(资源服务)标识码(OSID): 1概述 随着车企业务的快速发展,内部系统不断增多,每个系统都有自己的认证体系,用户需要记住每个系统的用户名和密码并在访问时输入校验,这样是非常麻烦的,所以用户希望只需要登录一次就可以访问所有指定的被信任的应用系统。 某车企的需求是将A、B、C三套系统进行单点登录整合,要求其中一个系统登录之后便可通过菜单链接到别的系统。A与C系统的登录用户用的是同一数据库的同一用户表,B系统的登录用户虽然和A、C不同,但是可以经由一定的关系映射过去。A、B系统所用框架是基于传统XML Spring的,而C系统是基于新的SpringBoot【1】框架开发的。 针对此车企的单点登录需求我们选择了CAS去开发实现。CAS全称为Central Authentication Service,中文意思是中央认证服务,是一个实现单点登录的开源框架,分为客户端与服务端两部分。 CAS服务端用来负责用户的认证工作,会提供一个统一的登录页面,用户输入登录名、密码登录后CAS会生成一个ticket存在服务器,还会生成一个类似cookie的票据返回客户端,用户下次访问带上票据经过CAS验证后便可以访问系统。 系统集成CAS客户端,便可以接入CAS服务。当用户访问车企集成完CAS客户端的系统时,系统先判断是不是登录,没有登录则重定向到CAS服务端的统一登录页面,用户再通过登录名、密码登录。 由于CAS服务端无法满足车企业务的需求,我们还需要对其进行二次开发。三个系统之前的登录功能都要废弃,登录统一到一个系统。选用Apache Shiro【2】为安全框架去整合使用CAS,可以大大提高集成的效率与可靠性。 2 CAS介绍 1)术语 Ticket Granting ticket (TGT):可以认为是CAS Server根据用户名密码生成的一张票,存在Server端。 Ticket-granting cookie (TGC):其实就是一个Cookie,存放用户身份信息,由Server发给Client端。 Service ticket (ST):由TGT生成的用于验证并且只能用一次的票据。相当于CAS服务端发给客户端的票,下次CAS客户端带着票找服务端校验。 2)处理流程 1、用户访问系统,若是没有登录,就重定向到CAS服务端的登录页面,URL形如http ://cas-ip:port/login?service=http ://ip:port,service后面的地址就是登录成功后要重定向的系统URL。 2、在登陆页面输入用户名密码认证,认证成功后CAS服务端生成TGT,再用TGT生成一个ST。然后再第三次重定向并返回ST和cookie(TGC)到浏览器。 3、浏览器带着ST再访问想要访问的地址http://ip:port /?ticket=ST-36828-xpvUKEdxVfeiPM0Sauz8,ticket后面那一串便是ST。 4、浏览器的服务器收到ST后再去CAS服务器驗证一下是不是为本身签发的,验证经由过程后就会表现页面信息,也便是重定向到第1步service后面的那个URL,首次登陆完毕。 5、再登陆另一个接入CAS服务端的客户端体系,重定向到CAS服务端,Server判定是第一次来(可是此时有TGC,也便是cookie,所以不用去登录页面了),但此时没有ST,去cas-server申请一个于是重定向到cas-server,形如:http://cas-ip:port /login?service=http://ip:port&&TGC(cookie)。 6、CAS服务端生成ST,重定向到浏览器http ://ip:port/?ticket=ST-31868-uiopasdcftqsxzmklgv6-yyyy。 7、浏览器的服务器收到ST后再去cas-server验证一下是否为自己签发的,验证通过后就会显示页面信息(同第4步)。 3 CAS服务端二次开发 我们选择使用Apache的CAS Server为单点登录服务器,但是其功能远远不能满足我们的需求,这个时候我们就需要基于源码进行二次开发。 3.1 环境搭建 采用maven overlays特性(通路径下的同名文件会使用最新的资源文件替换已有war目录中下的资源文件)搭建,只需引入Maven【3】依赖: 3.2修改CAS服务器端登录认证方式为数据库认证 CAS服务端初始提供的是比较简单的用户名、密码认证,这显然是不能满足车企需求的。在此我们需要修改使其支持基于数据库的用户名密码校验。 3.3 添加验证码校验 为了车企的安全起见,防止Cas Server被恶意登录及防暴力登录【4】。这里采用验证码校验。 1) 引入Maven依赖 kaptcha
2) 配置web.xml 下面的内容需要添加进src\main\webapp\WEB-INF\web.xml文件中: <!-- Captcha -->
3) UsernamePasswordCaptchaCredential 创建UsernamePasswordCaptchaCredential继承自 org.jasig.cas.authentication.RememberMeUsernamePasswordCredential,拓展了一个验证字段captcha @NotNull private String captcha; 4) 添加验证码校验 代码略 5) 配置login-webflow.xml 修改文件src\main\webapp\WEB-INF\login-webflow.xml,该文件是Spring Web Flow的配置文件。在这里定义说明了全部CAS服务端的登录校验认证流程。接下来,需要在登录属性表单中添加验证码字段及添加修改有关涉及验证码校验的流程替换原来的credential配置为我们新建的UsernamePasswordCaptchaCredential 3.4 CAS登录页定制 1) 拷贝资源文件 事先让美工设计一套登录页面。然后將css、image、js拷贝到src\main\webapp\css src\main\webapp\images src\main\webapp\js目录下。 2) 修改casLoginView.jsp 4 集成CAS客户端 4.1 引入Maven依赖 采用Shiro集成CAS单点登录客户端,添加Maven依赖: 4.2 ShiroFilter 配置ShiroFilter拦截外来请求,下图在ShiroCasFilterConfiguration类配置/api/**为authc,也就是api路径下的所有请求都必须登录才能访问。而其他路径下的请求则不受此约束。 Shiro集成CAS,其实就是将CasFilter加入到其Filter链中,对指定url访问请求用CasFilter进行拦截,实现单点登录、登出的校验功能。 4.3 CasRealm Shiro的核心配置是Realm,一般项目中继承Authorizingrealm类,实现其中的doGetAuthenticationInfo和doGetAuthorizationInfo方法。doGetAuthenticationInfo方法用于用户认证,可以设置登录后Session中的数据,doGetAuthorizationInfo用于授权,角色、权限分配。 Shiro集成CAS也是自定义realm继承CasRealm,由于认证在CAS服务端已经完成,CAS客户端只需要把CAS认证返回的token结合起来,加入自己的角色、权限控制业务等等就行。 数据资源中心的车企项目现在都是基于SpringBoot框架开发的,但是很多老项目是基于传统XML Spring【5】开发的,两者集成CAS客户端的方法不同但是基本原理是相同的。 5 配置与部署 1) 配置数据库连接 2) 部署方式 将CAS服务打成war包,放入tomcat运行,根据需要修改war包名,比如叫castest.war,tomcat启动以后,war包会被解压。在webapps\castest\WEB-INF下可以看见deployerConfigContext.xml,可以直接修改配置文件然后重启tomcat实现功能,数据库连接也可以在这里修改。 6 总结 CAS是实现单点登录的开源框架,对CAS系统进行二次开发,可以满足车企多系统统一认证登录的需求。Apache Shiro是主流的Java安全框架,采取Shiro去整合CAS客户端的集成,可以大大提高集成的效力与可靠性。由于车企系统有的是基于SpringBoot的,有的是基于传统XML Spring的,所以在客户端集成过程中会有一定差异,但是基本原理是一样的。通过单点登录的建设,大大提升了用户的体验,提高了软件系统的利用效力,在车企用户中获得了一致的好评。 参考文献: [1] 杨家炜.基于Spring Boot的web设计与实现[J].轻工科技,2016(7). [2] 丁洁.基于Shiro的Web应用安全框架设计研究[J].信息与电脑,2018(13):18. [3] 江日念,林霞,乔德新.Maven在Java项目中的引入及应用[J].电脑知识与技术,2013. [4] 汪颍.对于虚拟服务器SSH暴力登录攻击的防范[J].中国科技纵横,2013(1). [5] 张文宇,许明健,薛昱.论Spring的零配置与XML配置[J].计算机系统应用,2015. 【通联编辑:朱宝贵】 |
| 随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。