在Tomcat中使用Yale CAS實現單點登陸(SSO)

Tomcat中使用Yale CAS實現單點登陸(SSO)

 

耶魯大學開發的單點登錄系統稱爲CAS(Central Authentication Server)被設計成一個獨立的Web應用程序(cas.war)。它目前用幾個Java Servlet作爲實現並且通過一個Https服務器來運行。要使用單點登陸功能的Web應用作爲CAS的一個客戶端來運行。

由於CAS使用Https協議,所以首先要知道如何在容器中配置SSL。Tomcat的SSL配置相對其它的容器較爲簡單,SSL配置完成後CAS服務器一般都能正常運行了。

CAS的客戶端以一個Web應用的Filter運行。當Web應用的某個功能被請求時,Filter就會攔截應用的URL,從而迫使用戶到CAS服務器進行登陸。在所有不同的Web應用中,使用同一個CAS服務器進行登陸,即可達到單點登陸之目的。

本文使用同一個Tomcat(版本Tomcat5.0.30)配置CAS服務器及客戶端,分別在8443端口及8080端口。下面是在Tomcat中使用Yale CAS實現單點登陸的詳細步驟:

1.  安裝CAS服務器

1.1.  下載CAS發行包,下載地址:

CAS服務器:http://www.yale.edu/tp/cas/cas-server-2.0.12.zip
https://clearinghouse.ja-sig.org/wiki/download/attachments/924/cas-server-2.0.12.zip
CAS
客戶端:http://www.yale.edu/tp/cas/cas-client-2.0.11.zip
https://clearinghouse.ja-sig.org/wiki/download/attachments/827/cas-client-2.0.11.zip

1.2.     cas-server-2.0.12.zip解壓,並將lib/cas.war拷貝到Tomcatwebapps下,測試CAS服務器是否發佈正常,可以訪問http://localhost:8080/cas/login 出現登陸窗口。輸入用戶名密碼(用戶名=密碼),出現登陸成功頁面說明發布正常。

2.   配置Tomcat使用https協議

2.1.     使用Java自帶的keytool命令,產生SERVER的證書

D:/> keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file

其中my-alias-name爲別名,這行命令的作用是產生一個新的公共/私有鑰匙對。keystore-file爲存儲鑰匙和證書的文件。

命令運行後,根據提示回答。注意在開始問“你的名字”或“DName”的時候,必須填寫你服務器所在域名(在局域網中測試時,使用主機名或hosts文件中註冊的域名,本機可以使用localhost)。

2.2.     Tomcat8443端口配置SSL

Tomcat_Path/conf/server.xml文件中配置SSL的地方,增加如下配置:

    <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"

    port="8443" minProcessors="5" maxProcessors="75"

    enableLookups="true" disableUploadTimeout="true"

    acceptCount="100" debug="0" scheme="https"

    secure="true">

    <Factory className="org.apache.coyote.tomcat5.CoyoteServerSocketFactory"

    keystoreFile="D:/keystore-file"

    keystorePass="password" clientAuth="false" protocol="TLS" />

    </Connector>

其中,keystoreFile使用絕對路徑,keystorePass爲第3點輸入的keystore密碼。配置完成後,啓動Tomcat,訪問https://localhost:8443 ,訪問成功說明SSL配置成功。也可以訪問https://localhost:8443/cas/login

3.      配置 CAS客戶端

Tomcat中自帶的Servlet examples應用爲例,在Web應用中使用配置CAS客戶端。

3.1.        Servlet examples應用裏配置CAS客戶端,需修改servlets-examples/WEB-INF/web.xml,在web.xml文件中,加入如下Filter配置:

    <filter>

        <filter-name>CASFilter</filter-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/login</param-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:8080</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CASFilter</filter-name>

        <url-pattern>/servlet/*</url-pattern>

    </filter-mapping>

其中,第一,二個localhost都改成CAS服務器域名或主機名,第三個改成你servelt example應用域名或主機名,由於本文中CAS服務器與客戶端在同一主機同一Tomcat上,所以都爲localhost。若不在同一主機,則分別使用兩主機的域名或主機名。

3.2.     cas-client-2.0.11.zip解壓,把java/lib/casclient.jar拷貝到Tomcat的
webapps/servlets-examples/WEB-INF/lib目錄下(如果沒有就建一個)

3.3.     導出SERVER的證書,用來給所有需要用到的客戶端導入

D:/> keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file

3.4.     在客戶端的JVM裏導入信任的SERVER的證書,輸入keystore密碼時,注意現在的keystore爲cacerts,而cacerts的初密碼爲changeit,而不是前面keystore-file的密碼,所以要是沒有改過cacerts密碼應該輸入changeit.

D:/> keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name

其中,$JAVA_HOME改成JDK的絕對路徑。

4.         測試SSO

啓動Tomcat,訪問http://localhost:8080/servlets-examples/ ,隨便執行一個servlet,系統會自動跳轉到一個驗證頁面,隨便輸入一個相同的賬號,密碼,認證通過之後,就會訪問到你點擊的servlet了。

 

發佈了24 篇原創文章 · 獲贊 0 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章