CAS客戶端服務器端配置步驟


來自我的個人網站:http://lkf.22web.org/

cas介紹:

CAS 是 Yale 大學發起的一個開源項目,旨在為 Web 應用系統提供一種可靠的單點登錄方法,CAS 在 2004 年 12 月正式成為 JA-SIG 的一個項目。CAS 具有以下特點:

  • 開源的企業級單點登錄解決方案。
  • CAS Server 為需要獨立部署的 Web 應用。
  • 支持非常多的客戶端(這里指單點登錄系統中的各個 Web 應用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

CAS 原理和協議

從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨立部署,主要負責對用戶的認證工作;CAS Client 負責處理對客戶端受保護資源的訪問請求,需要登錄時,重定向到 CAS Server。圖1 是 CAS 最基本的協議過程:
圖 1. CAS 基礎協議

CAS Client 與受保護的客戶端應用部署在一起,以 Filter 方式保護受保護的資源。對於訪問受保護資源的每個 Web 請求,CAS Client 會分析該請求的 Http 請求中是否包含 Service Ticket,如果沒有,則說明當前用戶尚未登錄,於是將請求重定向到指定好的 CAS Server 登錄地址,並傳遞 Service (也就是要訪問的目的資源地址),以便登錄成功過后轉回該地址。用戶在第 3 步中輸入認證信息,如果登錄成功,CAS Server 隨機產生一個相當長度、唯一、不可偽造的 Service Ticket,並緩存以待將來驗證,之后系統自動重定向到 Service 所在地址,並為客戶端瀏覽器設置一個 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新產生的 Ticket 過后,在第 5,6 步中與 CAS Server 進行身份合適,以確保 Service Ticket 的合法性。

在該協議中,所有與 CAS 的交互均采用 SSL 協議,確保,ST 和 TGC 的安全性。協議工作過程中會有 2 次重定向的過程,但是 CAS Client 與 CAS Server 之間進行 Ticket 驗證的過程對於用戶是透明的。

另外,CAS 協議中還提供了 Proxy (代理)模式,以適應更加高級、復雜的應用場景,具體介紹可以參考 CAS 官方網站上的相關文檔。

CAS服務器端配置

配置服務器環境

首先下載必須的軟件:

Tomcat6.0: http://tomcat.apache.org/download-60.cgi
Windows Service Installer

Jdk: http://java.sun.com/javase/downloads/index.jsp
你可以選擇帶有 jre 的安裝文件或者你機器里現在有 jre 環境則只需要下載 JDK.
Java SE 6 Update 10 Beta  (
不帶JRE)
JDK 6 Update 6 (
帶JRE)
Java Runtime Environment (JRE) 6 Update 6 (JRE)

下面按步驟來:
1.安裝JDK和JRE
一直下一步到安裝完成,記住JDK安裝的路徑。


2.設置JDK相關的環境變量
1).切換到桌面,右鍵點擊“我的電腦” -> 屬性 -> 高級 -> 如圖 建立一個 JAVA_HOME 環境變量,變量值為JDK的根目錄。

2).和上面一樣的操作,建立 環境變量 CLASSPATH,值為 “.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar”

3).還是操作環境變量但不是新建,而是編輯。編輯 Path 變量,最變量值最后面加上 ;%JAVA_HOME%\bin;

3.安裝Tomcat
1).一直下一步,中間需要選擇安裝路徑和 JVM 目錄,如果JDK和JRE安裝沒問題,這里他應該能自動找得到,否則需要你手動指定一下。 中間什么也不用管,有一部讓你設置端口,不用動,保持默認的就行了。

2).新增一個 CATALINA_HOME 環境變量,變量值為你TOMCAT安裝時的根目錄。


3.測試運行服務器

安裝后的bin目錄共有一下幾個文件:
bootstrap.jar
tomcat-juli.jar
tomcat6.exe
tomcat6w.exe
其中tomcat6w.exe是監控tomcat運行的,可以直接運行,或者縮小到屏幕右下角成為一個小圖標。
直接運行tomcat6w.exe或者“tomcat6w //ES//” 都可以進入監控配置窗口;
或者運行“tomcat6w //MS//”把它縮小到右下角。

也可用startup.bat和shutdown.bat 來啟動和關閉服務。
web訪問測試
啟動后,可以通過瀏覽器進行訪問,測試運行是否正常。
用IE或者Firefox等瀏覽器,輸入地址:
http://localhost:8080/       –如果安裝時修改了端口,請把8080用修改后的值替換。
如果能夠正常瀏覽到tomcat歡迎信息,就是正確了,否則就要檢查安裝是否正確、防火牆的設置等。
經常遇到的一個問題是端口沖突,最常見的就是80端口被占用,導致服務無法正常啟動。如果通過tomcat6 //TS//tomcat6來啟動,馬上就能夠發現提示信息。修改一下tomcat6\conf\server.xml中的端口就能夠解決。

通常使用80端口的有:
1. IIS服務器,因為在windows服務器上,很多都安裝了IIS,而IIS默認的端口就是80.
2. skype即時聊天工具,skype的可以穿透防火牆的本領,也是通過占用80端口實現的。

查看端口占用的命令:
進入windows命令行,輸入:
netstat -an
這個命令返回有4列:protocol協議、local address本機地址、foreign address來訪者地址、status狀態
瀏覽本機地址一列,可以看到當前主機對外服務的IP地址、端口都有哪些。
如果一台機器有192.168.1.100和192.168.1.101兩個地址,那么:
0.0.0.0:80表示這台機器上所有80端口都被使用
127.0.0.1:80表示127.0.0.1的80被使用,但.100和.101IP地址的80還未使用。
192.168.1.100:80表示.100IP地址的80端口被使用
192.168.1.101:80表示.101IP地址的80端口被使用

 

 

 

部署 CAS Server

CAS Server 是一套基於 Java 實現的服務,該服務以一個 Java Web Application 單獨部署在與 servlet2.3 兼容的 Web 服務器上,另外,由於 Client 與 CAS Server 之間的交互采用 Https 協議,因此部署 CAS Server 的服務器還需要支持 SSL 協議。當 SSL 配置成功過后,像普通 Web 應用一樣將 CAS Server 部署在服務器上就能正常運行了,不過,在真正使用之前,還需要擴展驗證用戶的接口。

 

Tomcat配置HTTPS方式

 

1、開始-〉運行-〉cmd 進入到jdk下的bin目錄

2、輸入如下指令

keytool -v -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat.keystore  -validity 36500

附:

d:/tomcat.keystore是將生成的tomcat.keystore放到d盤根目錄下。

“-validity 36500”含義是證書有效期,36500表示100年,默認值是90天

注意若要放到c盤,在win7系統下,需要以管理員身份進入到命令行中進行操作,否則是無法創建tomcat.keystore的。本例放到d盤下。
如何以管理員身份進入到命令行下呢?開始->搜索框中輸入cmd->等待(注意不回車)->出現cmd.exe->右鍵“以管理員身份運行”即可。

3、輸入keystore密碼

密碼任意,此處以123456為例,要記住這個密碼,之后在進行server.xml配置時需要使用。

4、輸入名字、組織單位、組織、市、省、國家等信息

注意事項:

A、Enter keystore password:此處需要輸入大於6個字符的字符串

B、“What is your first and last name?”這是必填項,並且必須是TOMCAT部署主機的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你將來要在瀏覽器中輸入的訪問地址

C、“What is the name of your organizational unit?”、“What is the name of your organization?”、“What is the name of your City or Locality?”、“What is the name of your State or Province?”、“What is the two-letter country code for this unit?”可以按照需要填寫也可以不填寫直接回車,在系統詢問“correct?”時,對照輸入信息,如果符合要求則使用鍵盤輸入字母“y”,否則輸入“n”重新填寫上面的信息

D、Enter key password for <tomcat>,這項較為重要,會在tomcat配置文件中使用,建議輸入與keystore的密碼一致,設置其它密碼也可以

l  完成上述輸入后,直接回車則在你在第二步中定義的位置找到生成的文件

5、輸入之后會出現確認的提示

此時輸入y,並回車。此時創建完成keystore。
進入到D盤根目錄下可以看到已經生成的tomcat.xml

6、進入tomcat文件夾
找到conf目錄下的sever.xml並進行編輯

7、編輯
  <Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”150″ scheme=”https” secure=”true”
clientAuth=”false” keystoreFile=”D:/AppServer/Tomcat/apache-tomcat-6.0.32/conf/tomcat.keystore”
keystorePass=”deleiguo” sslProtocol=”TLS” />
注:
方框中的keystore的密碼,就是剛才我們設置的“123456”.

編輯完成后關閉並保存sever.xml

8、Tomcat啟動成功后,使用https://127.0.0.1:8443 訪問頁面

頁面成功打開即tomcat下的https配置成功。

 

9、注意事項:

(1)    生成證書的時間,如果IE客戶端所在機器的時間早於證書生效時間,或者晚於有效時間,IE會提示“該安全證書已到期或還未生效”

(2)    如果IE提示“安全證書上的名稱無效或者與站點名稱不匹配”,則是由生成證書時填寫的服務器所在主機的域名“您的名字與姓氏是什么?”/“What is your first and last name?”不正確引起的

 

10、遺留問題:

(1)如果AC主機不能通過域名查找,必須使用IP,但是這個IP只有在配置后才能確定,這樣證書就必須在AC確定IP地址后才能生成

(2)證書文件只能綁定一個IP地址,假設有10.1.25.250 和 192.168.1.250 兩個IP地址,在證書生成文件時,如使用了10.1.25.250,通過IE就只能使用10.1.25.250 來訪問AC-WEB,192.168.1.250是無法訪問AC-WEB的。

 

 

配置CAS
  1. 下載cas  http://www.ja-sig.org/downloads/cas/cas-server-3.4.2-release.zip
  2. 安裝cas-server,我們假定安裝cas-server的服務器為server1

(1)     將cas-server-3.4.2-release.zip 解壓,將moudels目錄下cas-server-webapp-x.x.war拷貝到tomcat的webapps目錄下,修        改名稱為cas.war.

(2)     生成server1的安全證書:

keytool -export -alias tomcat -file D:/file.cer -keystore d:/tomcat.keystore -validity 36500

然后輸入d:/tomcat.keystore中的keystore密碼

-file D:/file.cer 即為生成的cer文件,可直接點擊安裝

(3)     重新啟動server1上的tomcat,檢驗cas配置是否成功,訪問https://ip或域名:8443/cas/login,如果能看到cas的登錄頁面則表示配置成功。

cas客戶端配置

1、准備CAS的PHP庫和相關庫文件

1)下載 cas php客戶端 http://downloads.jasig.org/cas-clients/php/current/CAS-1.3.1.tgz

2) 由於其用到了PEAR的DB庫,需要下載

http://pear.php.net/get/PEAR-1.7.1.tgz

http://pear.php.net/get/DB-1.7.13.tgz

當然不一定是我說的版本,但我給的是我試驗成功的版本。

3) 用於使用到了SSL所以需要下載openssl。當然我是在windows環境下試驗的,下載的windows版本。

4)安裝openssl。

2、配置PHP環境

1)將CAS-1.3.1.tgz、PEAR-1.7.1.tgz、DB-1.7.13.tgz放在同一個目錄如圖。

4)由於phpcas用到了CURL(用於連接ssl),因此需要保證php解釋環境需要有這個擴展。需要做的就是修改ini文件將extentions節下的屏蔽符號去掉,然后就是檢查PHP環境的extentions目錄下是否有對應的.dll。一般標准安裝都會有。

3、測試CAS的php客戶端

1)在CAS-1.3.1.tgz中的docs/examples文件夾拷貝到網站的根目錄下。

2)config.example.php 修改為config.php

3)打開config.php 進行修改

4)訪問 localhost:8080/examples/example_simple.php  (客戶端的地址)

會跳轉到CAS服務器登錄頁面。默認只要用戶名和密碼相同就可以通過驗證。

 

登陸成功后會中轉到客戶端。提示驗證成功。

 

其它客戶端的配置按以上步驟配置。即可實現單點。

 

 

 

 

 

 

 

 

 

進階

CAS服務端使用數據庫驗證用戶
創建表

create table t_user(
username varchar(200) primary key,
password varchar(200)
);
insertinto users(username,password) values(‘test’,’123′);

添加jar

將數據庫驅動包:mysql-connector-java-5.1.5-bin.jar cas-server-support-jdbc-3.x.x.jar(來自於\cas-server-3.4.2\modules) copy到cas/WEB-INF/lib/下

創建驗證service層

創建LoginDAO

public class LoginDAO extends JdbcDaoSupport {

public List queryList(String sql,Object[] objs){
return this.getJdbcTemplate().queryForList(sql, objs);
}
}

創建LoginService

public class LoginService {

private LoginDAO loginDAO;

/**
* 判斷用戶登錄信息
* @param username
* @param password
* @return null為用戶不存在,false密碼錯誤,true登錄成功
*/
public Boolean isUserCorrect(String username,String password){
String sql = “select password from t_user where username=?”;

List results = loginDAO.queryList(sql, new Object[]{username});
if(results==null||results.size()==0){
return null;
}else if(password.equals(((Map)results.get(0)).get(“password”).toString())){
return new Boolean(true);
}else{
return new Boolean(false);
}
}

public LoginDAO getLoginDAO() {
return loginDAO;
}

public void setLoginDAO(LoginDAO loginDAO) {
this.loginDAO = loginDAO;
}
}

重寫驗證類

//重寫AbstractUsernamePasswordAuthenticationHandler中驗證方法authenticateUsernamePasswordInternal
public class UserAuthenticationHandler extends
AbstractUsernamePasswordAuthenticationHandler {

private LoginService loginService;

@Override
protected boolean authenticateUsernamePasswordInternal(
UsernamePasswordCredentials credentials) throws AuthenticationException {
String username = credentials.getUsername();
String password = credentials.getPassword();
Boolean result = loginService.isUserCorrect(username, password);
if(result==null){
//用戶不存在,”error.authentication.credentials.bad.usernameorpassword.username”必須在message配置文件中定義,驗證失敗時會在登錄頁面顯示信息
throw new BadPasswordAuthenticationException(“error.authentication.credentials.bad.usernameorpassword.username”);
}else if(!result.booleanValue()){
//密碼錯誤
throw new BadPasswordAuthenticationException(“error.authentication.credentials.bad.usernameorpassword.password”);
}else{
//登錄成功
return true;
}

}

public LoginService getLoginService() {
return loginService;
}

public void setLoginService(LoginService loginService) {
this.loginService = loginService;
}

}

定義錯誤信息

在messages_zh_CN.properties中添加驗證出錯信息

error.authentication.credentials.bad.usernameorpassword.username=用戶不存在

error.authentication.credentials.bad.usernameorpassword.password=密碼錯誤

配置WEB-INF\deployerConfigContext.xml文件

<!– 在添加DataSource –>
<bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource” >
<property name=”driverClassName”>
<value>com.mysql.jdbc.Driver</value>
</property>
<property name=”url”>
<value>jdbc:mysql://localhost:3306/test</value>
</property>
<property name=”username”>
<value>root</value>
</property>
<property name=”password”>
<value>root</value>
</property>
</bean>

<!– 注入Service和DAO –>
<bean name=”jdbcTemplate” class=”org.springframework.jdbc.core.JdbcTemplate”>
<property name=”dataSource” ref=”dataSource”></property>
</bean>

<bean name=”loginDAO” class=”com.cas.dao.LoginDAO”>
<property name=”jdbcTemplate” ref=”jdbcTemplate”></property>
</bean>

<bean name=”loginService” class=”com.cas.service.LoginService”>
<property name=”loginDAO” ref=”loginDAO”></property>
</bean>

<!– 找到SimpleTestUsernamePasswordAuthenticationHandler的bean,將它注釋掉,添加下面的bean –>
<bean class=”com.cas.authentication.UserAuthenticationHandler” >
<property name=”loginService” ref=”loginService”></property>
</bean>啟動tomcat,測試登錄.(如果是使用war在tomcat解壓的服務端,必須將上面類的編譯完的class文件,包,信息配置文件復制到WEB-INF\classes下)

本文出自 南柯一夢的小站,轉載時請注明出處及相應鏈接。

本文永久鏈接: http://lkf.22web.org/?p=5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM