1 实验环境
1.1 CAS Server端
FreeBSD + Diablo-JDK 1.5.0 + Tomcat 6.0 + CAS Server 3.2.1
IP地址:192.168.0.180
域名:www.test.com
1.2 CAS Client 端
Windows + JDK 1.5.10 + Tomcat 6.0 + JA-SIG CAS-Client-3.1.3
IP地址:192.168.0.116
1.3 CAS Server 端数据验证的数据库
数据库:PostgreSQL 8.2
IP 地址192.168.0.180
数据库名称:BH_PORTAL
表名称:citizen
表定义:
CREATE TABLE citizen
(
citizenid character varying(20) NOT NULL,
"password" character varying NOT NULL,
question character varying,
answer character varying,
name character varying NOT NULL,
CONSTRAINT citizen_pkey PRIMARY KEY (citizenid)
)
说明:其中citizenid用于登录的ID,”password”用于密码校验
2 环境搭建
2.1 CAS 服务器端
2.1.1 为CAS服务器端生成HTTPS证书并注册
在%JAVA_HOME%/jre/lib/security目录下运行如下Shell文件
#!/bin/csh
clear
keytool -delete -alias tomcatsso -keystore cacerts -storepass changeit
keytool -list -keystore cacerts -storepass changeit
keytool -genkey -keyalg RSA -alias tomcatsso -dname "cn=www.test.com" -keystore cacerts -storepass changeit
keytool -export -alias tomcatsso -file tomcatsso.crt -keystore cacerts -storepass changeit
keytool -import -alias tomcatsso -file tomcatsso.crt -keystore cacerts -storepass changeit
keytool -list -keystore cacerts -storepass changeit
说明:在生成key的过程,"cn=www.test.com" 中的www.test.com为Server端的域名。
2.1.2 配置Tomcat的HTTPS服务
将cacerts文件复制到TOMCAT的conf目录下
修改server.xml
connectionTimeout="20000"
redirectPort="443" />
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/cacerts" keystorePass="changeit"
truststoreFile="conf/cacerts"/>
启动Tomcat,测试https://www.test.com:443
2.2 CAS客户端
2.2.1 复制证书
复制tomcatsso.crt 文件到%JAVA_HOME%/jre/lib/security
2.2.2 导入证书
将证书tomcatsso.crt 文件导入到cacerts文件中
keytool -import -alias tomcatsso -file tomcatsso.crt -keystore cacerts -storepass changeit
3 配置
3.1 服务器端
3.1.1 部署cas server
将下载的cas-server-webapp-3.2.1.war复制到TOMCAT的webapps目录下,并改名为cas-server.war。
3.1.2 修改认证方式
在WEB-INF目录下修改deployerConfigContext.xml文件
将原来的
修改为
其目的是将原来的SimpleTestUsernamePasswordAuthenticationHandler认证改为根据数据库数据进行认证。
3.2 客户端应用
3.2.1 建立应用
partner1和partner2
Partner1下建立子目录secure,在secure中写2个测试页面,debug.jsp和index.jsp。
3.2.2 Partner1配置
编辑web.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
编辑spring-appContext.xml文件
在/WEB-INF/classes目录下创建spring-appContext.xml文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
class="org.jasig.cas.client.authentication.AuthenticationFilter">
class="org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter">
class="org.jasig.cas.client.util.HttpServletRequestWrapperFilter"/>
复制所需JAR包
cas-client-core-3.1.3.jar和spring.jar这两个JAR包复制到/WEB-INF/lib目录下
3.2.3 Partner2配置
同partner1完全相同
3.2.4 gateway参数更改(用于实验三, 在实验一和实验二中不要修改)
配置index.jsp的Gateway参数
设置Gateway参数为false(默认值为false)
web.xml文件:
保持原有无需改变
spring-appContext.xml文件:
给AuthenticationFilter对应的Bean添加一个属性gateway,并显式的设置为false
配置debug.jsp的Gateway参数
设置Gateway参数为true(默认值为false)
web.xml文件:
为debug.jsp独立配置上面spring-appContext.xml文件中所提及到的3个过滤器AuthenticationFilter, Cas20ProxyReceivingTicketValidationFilter, HttpServletRequestWrapperFilter。
spring-appContext.xml文件:
给AuthenticationFilter对应的Bean添加一个属性gateway,并设置值为true
4 实验
4.1 实验一:单点登录
A. 访问http://192.168.0.116:8080/partner1/secure/index.jsp
B. 浏览器Redirect到CAS服务器端,输入用户名和密码,点击确认
C. 在另外一个选项卡上访问http://192.168.0.116:8080/partner2/secure/index.jsp
4.2 实验二:单点登出
A. 访问http://192.168.0.116:8080/partner1/secure/index.jsp
B. 浏览器Redirect到CAS服务器端,输入用户名和密码,点击确认
C. 在另外一个选项卡上访问http://192.168.0.116:8080/partner2/secure/index.jsp
D. 在另外一个选项卡上访问https://www.test.com:443/cas-server/logout,进行登出
E. 在另外一个选项卡上访问http://192.168.0.116:8080/partner2/secure/debug.jsp,确认登出成功
4.3 实验三:测试Gateway参数
A. 访问http://192.168.0.116:8080/partner1/secure/debug.jsp
B. 在另外一个选项卡上访问http://192.168.0.116:8080/partner1/secure/index.jsp
浏览器Redirect到CAS服务器端,输入用户名和密码,点击确认