搭建CAS分为以下几个步骤:
1:下载CAS服务端及客户端(客户端因需求原因,基本上没用到)
2:配置TOMCAT的SSL
3:发布CAS服务端
4:配置CAS客户端
5:测试
下面将按照步骤一步步进行
一:下载CAS服务端及客户端
CAS的官网地址:http://www.jasig.org/cas
CAS服务端目前的最新版本是3.4.2,我也是使用的这个版本,首页就有下载提示
下载之后的文件全称是:cas-server-3.4.2-release.zip
CAS客户端我使用的是JAVA版的,目前最新版本是3.1.10,
下载地址:http://www.ja-sig.org/downloads/cas-clients/
二:配置TOMCAT的SSL
这个SSL说复杂也挺复杂,说容易也不难,就看您想配个什么样的SSL了
我配的是超简单的那种SSL,就是单向的,只有服务器验证的,使用JDK自带的keytool工具生成的证书。
1:创建keyPair
- keytool -genkey -alias cas -keyalg RSA -keystore cas-store.keystore -validity 365
证书的CN值应该是CAS服务端所在机器的域名,当然机器名也可,或者干脆使用localhost,这将直接影响到CAS客户端是否能请求到CAS服务端,我的环境是局域网,所以直接使用机器名就行“JcBay-PC”
2:导出公钥并导入到信任证书库
这一步如果不搞的话,那么客户端在请求CAS服务端时将抛错提示说什么找不到证书请求路径之类的信息
- keytool -export -trustcacerts -alias cas -file cas-key.cer -keystore cas-store.keystore
- keytool -import -trustcacerts -alias cas-server -file cas-key.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -storpass changeit
3:配置Tomcat的server.xml
- <Connector port= "8443" protocol= "HTTP/1.1" SSLEnabled= "true"
- maxThreads="150" scheme= "https" secure= "true"
- clientAuth="false" sslProtocol= "TLS"
- keystoreFile="conf/cas-store.keystore"
- keystorePass="111111"
- />
这样,Tomcat的SSL配置就结束了,需要提醒各位的是,不同版本的Tomcat所配置SSL的方法都不同,所以请根据自己所用的版本使用正确的配置方法
https://localhost:8443 测试是否可以看到小猫
三:发布CAS服务端
将下载的cas-server-3.4.2-release.zip解压缩,在modules目录中拷贝cas-server-webapp- 3.4.2.war到Tomcat目录下的webapps中改名为“cas”。在modules目录中还有一些JAR包,这些JAR包都是对各种认证方式 的支持包,比如JDBC、LDAP、RADIUS、X509等等,更重要的是有源码,可以哪里不爽改哪里!
启动Tomcat,
四:配置CAS客户端
在我的测试例子中,采用的是JAVA版的客户端,并只是简单测试了SSO和跨域登录,均实用ST完成,并未使用代理票据
CAS的客户端源码我简单的看了看,其实主要也就是干两件事,一是请求CAS服务端并获得ST(or PT),而是验证ST并获得账号,当然,其它比如根据Filter的参数设置,也会干些其它的事。
按照官网的介绍,配置CAS客户端有很多种方法,当然咱选最简单的那种(web.xml)配置
实现客户端的Filter即可,根据官网的介绍,我也是能简单就简单,所以参数除了必选之外,都保持默认值
将下载的CAS客户端解压缩,将module目录中的所有JAR包复杂到业务系统的lib目录下,然后编辑业务系统的web.xml文件,加下以下配置
- <filter>
- <filter-name>CAS Authentication Filter</filter-name>
- <filter-class >org.jasig.cas.client.authentication.AuthenticationFilter</filter- class >
- <init-param>
- <param-name>casServerLoginUrl</param-name>
- <param-value>https://JcBay-PC:8443/cas/login</param-value>
- </init-param>
- <init-param>
- <param-name>serverName</param-name>
- <param-value>JcBay-PC:8080 </param-value>
- </init-param>
- <init-param>
- <param-name>gateway</param-name>
- <param-value>false </param-value>
- </init-param>
- </filter>
- <filter>
- <filter-name>CAS Validation Filter</filter-name>
- <filter-class >org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter- class >
- <init-param>
- <param-name>casServerUrlPrefix</param-name>
- <param-value>https://JcBay-PC:8443/cas</param-value>
- </init-param>
- <init-param>
- <param-name>serverName</param-name>
- <param-value>JcBay-PC:8080 </param-value>
- </init-param>
- <init-param>
- <param-name>acceptAnyProxy</param-name>
- <param-value>true </param-value>
- </init-param>
- </filter>
- <filter>
- <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
- <filter-class >org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter- class >
- </filter>
- <filter>
- <filter-name>CAS Assertion Thread Local Filter</filter-name>
- <filter-class >org.jasig.cas.client.util.AssertionThreadLocalFilter</filter- class >
- </filter>
别忘了配置mapping标签,我都采用的/*作用域
五:测试
我的测试环境是,服务端和客户端均在同一台机器上,所以,我直接输入URL:http://localhost:8080/BusTest
BusTest为业务系统名,这时会跳转到CAS登录界面,输入账号口令(均一致),确定后跳转到BusTest业务系统,表示成功。
假如说您的客户端和CAS服务端不在同一台机器,那么您的客户端就需要将服务端的公钥导入到您本地的信任库中,并且请确保服务端的域名与之前创建KEYPAIR时所填的域相同
据官网介绍说,因为CAS使用的COOKIE为服务端有效,所以没有域的概念,不论你的客户端运行在何处,只要是使用的同一个CAS服务端,那么都能实现SSO功能。