CAS 单点登录系统
一、什么是单点登录
单点登录(Sign Sion On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。对于存在诸多子系统且子系统分别部署到不同的服务器中,那么使用传统的 session 是无法解决的,就需要使用单点登录技术来解决。
如图:第一次访问应用系统1时,会自动跳转到认证系统进行登录,当登录成功时返回 ticket(票据)存储在用户本地,类似于 Cookie。当用户第二次访问应用系统2时,会将 ticket 传送过去,应用系统2与认证系统之间进行 ticket 的验证(系统内部的交互,不会进行页面之间的跳转,用户基本感受不到)验证成功后进入应用系统2中。其余系统访问与应用系统2相同。
二、什么是 CAS
CAS 是 Yale 大学发起的一个开源项目,目的为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 04 年正式成为 JA-SIG 的一个项目。CAS 具有如下特点:
● 开源的企业级单点登录解决方案。
● CAS Server 为需要独立部署的 Web 应用,换句话说就是一个 war 包,直接放入Tomcat 进行使用。
● CAS Client 支持非常多的客户端(指的是非常多的 Web 应用),包括 Java、.Net、PHP、Apache、Ruby 等
从结构上看,CAS 包含两个部分:CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client(用户的应用系统) 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server,下图是 CAS 最基本的协议过程。
三、CAS 服务端部署
CAS 服务端其实就是一个 war 包(cas-server-webapp-4.0.0.war),将其改名为 cas.war 放入 Tomcat 目录下的 webapps 下。启动 Tomcat 自动解压 war 包,在浏览器中输入 http://localhost:8080/cas/login 可以看到登录页面:默认登录用户名 casuser,密码 Mellon
四、服务端配置
【1】如果不希望用 8080 端口访问 CAS 可以修改端口:打开 Tomcat 目录 conf/server.xml 修改如下内容:将 8080 修改为你想要的端口(9100)
CAS默认使用的是 HTTPS 协议,如果使用 HTTPS 协议需要 SSL 安全证书(需要向特定的机构申请和购买)。如果安全要求不高或者是开发测试阶段, 可使用 HTTP协议。我们这里讲解通过修改配置,让 CAS使用 HTTP协议。
修改 cas 的 WEB-INF/deployerConfigContext.xml 修改配置文件:这里需要增加参数 p:requireSecure="false", requireSecure 属性意思为是否需要安全验证,即 HTTPS,false 为不采用
参数 p:cookieSecure="true",同理为HTTPS验证相关,true为采用 HTTPS 验证,false 为不采用 https 验证。
参数 p:cookieMaxAge="-1",是 COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在 3600秒内,打开任意窗口,都不需要验证。
我们这里将 cookieSecure改为false , cookieMaxAge 改为3600
五、CAS 入门客户端 Demo
【1】搭建 maven Project 工程(cas_demo1 与 cas_demo2 两个工程)引入 cas 客户端依赖并定制 tomcat 运行端口分别为 9001 和 9002
【2】webapp 文件下创建 WEB-INF/web.xml 文件,内容如下:需要修改本地服务的地址和 CAS 服务器的地址。
【3】webapp 中编写 index.jsp 页面,保持页面中的内容不同即可(用于服务两个服务)
六、单点退出登录
单点登录链接:http://192.168.88.129:9100/cas/logout 既退出所有节点的用户登录。便可看到登出提示页面:
如果我们希望退出登录后,自动跳转到某个自己设定的页面,需要做如下修改:
【1】修改 cas系统的配置文件 cas-servlet.xml ,将 p:followServiceRedirects 中的 false 修改为 true 既可以重定向。
【2】改为 true 后,可以在退出时跳转页面到目标页面,修改 index.jsp 的退出链接,在连接中添加 service= 目标地址
七、CAS 服务端数据源设置 (用户信息从数据库中获取)
修改cas服务端中 web-inf 下 deployerConfigContext.xml ,添加如下配置
然后在配置文件开始部分找到如下配置
其中 <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> 一句是使用固定的用户名和密码,我们在下面可以看到这两个bean ,如果我们使用数据库认证用户名和密码,需要将这句注释掉。添加下面这一句配置 <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/> 修改后如下:
将上面配置的三个 Bean 所涉及的 jar 包放入webapps\cas\WEB-INF\lib 下
八、优缺点
优点 :用户身份信息独立管理,更好的分布式管理。同时, 可以自己扩展安全策略;
缺点:认证服务器访问压力较大。需要根据自己系统的情况判断是否选择使用SSO;