1 目的
撰寫本文的目的是記錄一個簡單、以數據庫爲驗證用戶的單點登陸的CAS配置過程,看過其他文檔,要麼沒有配置過程,要麼過於複雜。配置之前建議先仔細研究下相關的參考文檔,只有明白了相關原理,配置起來其實很簡單。
2 名詞解說
Single Sign On - 通過用戶登錄一次,即可獲得需訪問系統和應用軟件的授權。
Yale CAS - 耶魯大學開發的單點登錄(Single Sign On)系統稱爲CAS(Central Authentication Server)被設計成一個獨立的Web應用程序(cas.war)。
3 參考
Keytool使用指南:
Tomcat-ssl配置指南:
Cas文檔:
4 安裝環境
5 配置過程
5.1 安裝和配置Tomcat的SSL
參考以下帖子-Tomcat SSL配置大全:
5.2 配置CAS服務器端
解壓 cas-server-3.0.6.zip,把 /target/cas.war copy 到 %CATALINA_HOME%/webapps/ 下
5.3 配置CAS 客戶端
我們要將tomcat的jsp-examples 及servlets-examples2個應用全部經過SSO的驗證,CAS缺省驗證方式的類是:org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler
這種配置只是用於測試目的,只要用戶名和密碼相同就可以驗證通過了。
5.3.1 配置應用servlets-examples
修改/webapps/servlets-examples/WEB-INF/web.xml
在 servlet 及 servlet-mapping 中間加上以下設置:
xml 代碼
- <filter>
- <filter-name>CASFilterfilter-name>
- <filter-class>
- edu.yale.its.tp.cas.client.filter.CASFilter
- filter-class>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.loginUrl
- param-name>
- <param-value>https://localhost:8443/cas/loginparam-value>
- init-param>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.validateUrl
- param-name>
- <param-value>
- https://localhost:8443/cas/proxyValidate
- param-value>
- init-param>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.serverName
- param-name>
- <param-value>localhost:8080param-value>
- init-param>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.serverName2
- param-name>
- <param-value>192.168.5.13:8080param-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>CASFilterfilter-name>
- <url-pattern>/servlet/*url-pattern>
- filter-mapping>
注: edu.yale.its.tp.cas.client.filter.serverName 是表示需要 redirect 的網址,如果有1個以上的網址, 則可以一直增加上去,注意 param-name 要不一樣
edu.yale.its.tp.cas.client.filter.loginUrl 是 redirect 的網址。
5.3.2 配置應用jsp-examples
修改%CATALINA_HOME%/webapps/jsp-examples/WEB-INF/web.xml在 servlet 及 servlet-mapping中間加上以下設置:
xml 代碼
- <filter>
- <filter-name>CASFilterfilter-name>
- <filter-class>
- edu.yale.its.tp.cas.client.filter.CASFilter
- filter-class>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.loginUrl
- param-name>
- <param-value>https://localhost:8443/cas/loginparam-value>
- init-param>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.validateUrl
- param-name>
- <param-value>
- https://localhost:8443/cas/proxyValidate
- param-value>
- init-param>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.serverName
- param-name>
- <param-value>localhost:8080param-value>
- init-param>
- <init-param>
- <param-name>
- edu.yale.its.tp.cas.client.filter.serverName2
- param-name>
- <param-value>192.168.5.13:8080param-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>CASFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
注: jsp-examples,和 servlets-examples 基本上大同小異,唯一不一樣就是 filter-mapping 的 url-pattern,jsp-examples 是 /*,servlets-examples 是 /servlet/*。
5.3.3 設置需要用到的cas-client庫
將casclient-2.1.1.zip改名爲casclient-2.1.1.jar, copy 到jsp-examples 及 servlets-examples的lib下。
5.4 測試配置
啓動tomcat,訪問如下地址:
這時,系統會提示你將要訪問的是加密網站,並問你接受該網站提供的證書,點接受後,將顯示CAS單點登陸頁面,地址變成如下:
輸入任意的用戶名,密碼和用戶名相同就可以進入剛纔要訪問的頁面。
這時再訪問servlets-examples 應用下面的任一個servlet,如:
訪問後,你會發現地址欄的地址變爲:
後面增加了?ticket=ST-3-6EuKFN4M2aLj9cVup6sABykzheEnAnY3Zmb-20,這就是CAS的ticket(票據)
剛纔我們其實配置了2個應用都是需要驗證用戶的,如果用戶先訪問servlets-examples應用下面的servlet,同樣會提示登陸,再訪問jsp-examples,也不會提示登陸了,說明我們的單點登陸配置成功。
5.5 配置CAS通過數據庫驗證用戶
CAS缺省配置只是用於測試目的,實際應用中,通過數據庫進行驗證用戶最爲常見,所以,我們現在測試通過數據庫驗證用戶。先停止tomcat.
5.5.1 創建數據庫表
我們測試使用的是oracle數據庫,可以選用任何一個支持JDBC的數據庫。用scott/tiger登陸sqlplus,輸入如下語句創建用戶表和輸入測試數據:
create table app_user(username varchar(100), password varchar(100));
insert into app_user values('tomcat', 'tomcat');
insert into app_user values('cas', 'cas');
commit;
5.5.2 修改CAS 服務器端配置
修改%CATALINA_HOME%/webapps/cas/WEB-INF/ deployerConfigContext.xm把以下的程序代碼屏蔽掉:
xml 代碼
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
在同一地方加上以下程序代碼:
xml 代碼
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from app_user where username=?" />
<property name="dataSource" ref="dataSource" />
bean>
定義 dataSource bean,注意,配置的地方應該在之前,不要放錯了位置,不是和以上驗證bean放在一起。
xml 代碼
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName"><value>oracle.jdbc.driver.OracleDrivervalue>property>
<property name="url"><value>jdbc:oracle:thin:@127.0.0.1:1521:oracle9ivalue>property>
<property name="username"><value>scottvalue>property>
<property name="password"><value>tigervalue>property>
bean>
5.5.3 添加CAS 服務器需要用到的jar
把 cas-server-3.0.6.zip裏的 /target/cas-server-jdbc-3.0.6.jar copy 到%CATALINA_HOME%/webapps/cas/WEB-INF/lib下。
把 Oracle jdbc jar即ojdbc14.jar copy到%CATALINA_HOME%/webapps/cas/WEB-INF/lib下。
5.5.4 再次測試
啓動tomcsat,重複剛纔的測試,哈哈,輸入tomcat/tomcat,可以了。