(一) 初探CAS SSO
相關(guān)概念:
SSO英文全稱Single Sign On,單點登錄。SSO是在多個應用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。它包括可以將這次主要的登錄映射到其他應用中用于同一個用戶的登錄的機制。它是目前比較流行的企業(yè)業(yè)務整合的解決方案之一。
要實現(xiàn)SSO,需要以下主要的功能:
1、所有應用系統(tǒng)共享一個身份認證系統(tǒng)。
統(tǒng)一的認證系統(tǒng)是SSO的前提之一。認證系統(tǒng)的主要功能是將用戶的登錄信息和用戶信息庫相比較,對用戶進行登錄認證;認證成功后,認證系統(tǒng)應該生成統(tǒng)一的認證標志(ticket),返還給用戶。另外,認證系統(tǒng)還應該對ticket進行效驗,判斷其有效性。
2、所有應用系統(tǒng)能夠識別和提取ticket信息
要實現(xiàn)SSO的功能,讓用戶只登錄一次,就必須讓應用系統(tǒng)能夠識別已經(jīng)登錄過的用戶。應用系統(tǒng)應該能對ticket進行識別和提取,通過與認證系統(tǒng)的通訊,能自動判斷當前用戶是否登錄過,從而完成單點登錄的功能。
cas是耶魯大學開發(fā)的一個開源項目,含義為集中認證服務(Central Authentication Service),
目標為:當耶魯大學有新的應用系統(tǒng)上線時,這個應用系統(tǒng)只需要配置使用cas來保護它的資源受限訪問,而不需要 這個應用系統(tǒng)本身再編寫安全方面的代碼。
SSO相關(guān)的Ticket知識
資源準備
Tomcat6
CAS Server&Client
http://www.ja-sig.org/downloads/cas/cas-server-3.1.1-release.zip
http://www.ja-sig.org/downloads/cas-clients/cas-client-java-2.1.1.zip
開始實踐
CAS Server 是一套基于 Java 實現(xiàn)的服務,該服務以一個 Java Web Application 單獨部署在與 servlet2.3 兼容的 Web 服務器上,另外,由于 Client 與 CAS Server 之間的交互采用 Https 協(xié)議,因此部署 CAS Server 的服務器還需要支持 SSL 協(xié)議。當 SSL 配置成功過后,像普通 Web 應用一樣將 CAS Server 部署在服務器上就能正常運行了,不過,在真正使用之前,還需要擴展驗證用戶的接口。
(一) 創(chuàng)建證書
首先對SSL的安全協(xié)議生成一個證書. 在CMD命令下依次執(zhí)行下面命令或者放在一個bat文件中,一次執(zhí)行.
keytool -delete -alias tomcat -keypass changeit -storepass changeit
keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -storepass changeit
keytool -export -alias tomcat -keypass changeit -file server.crt -storepass changeit
keytool -delete -alias mykey -keypass changeit -storepass changeit -keystore "C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts"
keytool -import -file server.crt -keypass changeit -storepass changeit -keystore "C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts"
這樣就生成了一個證書,并且導入進密鑰庫,相關(guān)證書的生成使用方法和命令的使用請使用百度 O(∩_∩)O哈哈~
在生成證書的時候會提示
輸入CN,這里必須輸入域名,如果在本地請使用機器名或者localhost,不能用IP,否則部署不成功會出現(xiàn)下面的異常.
嚴重: edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator prox
yList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://192.168.1.111:8443/cas/proxyValidate] ticket=[ST-0-9h7Mx5HK3pfsdxRv
MD3y] service=[http%3A%2F%2F192.168.1.222%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
這個CAS異常是從CAS Client里面拋出,是當我們不使用證書的CN去訪問域名的時候,CASClient無法信任,特別注意!!
(二) 配置CASServer
在Tomcat6目錄下配置支持https協(xié)議,修改 \Tomcat 6.0\conf\server.xml 文件,找到https段,如下配置
1 <Connector protocol="org.apache.coyote.http11.Http11Protocol"
2 port="8443" minSpareThreads="5" maxSpareThreads="75"
3 enableLookups="true" disableUploadTimeout="true"
4 acceptCount="100" maxThreads="200"
5 scheme="https" secure="true" SSLEnabled="true"
6 keystoreFile="C:/Documents and Settings/Administrator/.keystore" keystorePass="changeit"
7 truststoreFile="C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts"
8 clientAuth="false" sslProtocol="TLS"/>
解壓cas-server-3.3-release.zip,并將\cas-server-3.0.5\cas-server-3.0.5\target\cas.war放到\Tomcat 6.0\webapps下
然后啟動Tomcat6,在瀏覽器中輸入
https://localhost:8443/cas 出現(xiàn)CASServer登錄界面,即CASServer配置成功.
(三) 配置一個應用到CAS SSO中
在應用工程中加入casclient.jar,修改web.xml,過濾器應配置在所有其他過濾器的前面
1 <filter>
2 <filter-name>CASFilter</filter-name>
3 <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
4 <init-param>
5 <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
6 <param-value>https://soho:8443/cas/login</param-value>
7 </init-param>
8 <init-param>
9 <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
10 <param-value>https://soho:8443/cas/proxyValidate</param-value>
11 </init-param>
12 <init-param>
13 <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
14 <param-value>soho:8443</param-value>
15 </init-param>
16 </filter>
17
18 <filter-mapping>
19 <filter-name>CASFilter</filter-name>
20 <url-pattern>/*</url-pattern>
21 </filter-mapping>
啟動應用,輸入訪問應用的路徑會發(fā)現(xiàn)沒有經(jīng)過CASServer的認證,不能直接訪問到,而跳到了CAS的登錄界面,登錄后才會被引導到正確的路徑.
簡單的CAS SSO 初探成功,再來對他進行深入的使用!
posted on 2009-03-10 11:55
弦驚塞外 閱讀(806)
評論(2) 編輯 收藏