1. CAS简介及示例
1.1 什么是单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。
1.2 什么是CAS
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
【1】开源的企业级单点登录解决方案。
【2】CAS Server 为需要独立部署的 Web 应用。
【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图是 CAS 最基本的协议过程:
SSO单点登录访问流程主要有以下步骤:
1)访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
2)定向认证:SSO客户端会重定向用户请求到SSO服务器。
3)用户认证:用户身份认证。
4)发放票据:SSO服务器会产生一个随机的Service Ticket。
5)验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
6)传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。
1.3 CAS服务端部署
1.3.1 下载CAS源码
官网地址:http://www.ja-sig.org/cas
源码地址:https://github.com/apereo/cas/
下载版本:4.0.7
Tips:从官方github上各个版本的项目结构可以发现,CAS从4.2.X版本开始用gradle做项目管理,为了方便上手,这里我们用基于maven管理的老版本4.0.7。而不使用4.1.X版本是因为个人在整合的时候发现其在配置完数据库后测试,登录验证通过后不跳转页面,仍然是当前登录页,换4.0.X就好了。
如果有对CAS的定制化需求,可以去官网找相关文档查阅:
1.3.2 编译并部署CAS
1)解压CAS源码并导入到项目中
2)安装CAS相关jar包依赖,只需执行最顶层的root根服务就行了。注意把test测试关掉,走测试会造成执行很慢。
3)pom文件中加入tomcat插件
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<uriEncoding>UTF-8</uriEncoding>
<path>/cas</path>
</configuration>
</plugin>
4)配置maven命令启动项
clean install -Dmaven.test.skip=true tomcat7:run
5) 启动
如果有“OutOfMemoryError:PerGen space”报错,这是因为加载的类太多,JVM内存不够,我们需要加入以下配置来扩大其内存空间:-Xms1024M -Xmx2048M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=512M
6)登录测试
“deployerConfigContext.xml”中配置有一个初始用户信息,可以用它登录测试,真实环境是要从数据库中查的。