集成框架中使用CAS實現單點登錄技術方案_第1頁
集成框架中使用CAS實現單點登錄技術方案_第2頁
集成框架中使用CAS實現單點登錄技術方案_第3頁
集成框架中使用CAS實現單點登錄技術方案_第4頁
集成框架中使用CAS實現單點登錄技術方案_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、集成框架中使用 CAS 實現單點登錄技術方案1、2、3、4、文檔摘要 1.1 文檔分類 1.2 關鍵字 1.3使用SSO的最終目的 1.4 摘要 1.5 參考 1.5 修改歷史 技術方案 2.1 問題或場景 22 web SSO的原理 2.3 CAS的基本原理2.4 CAS 協議2.5 配置一個基本的 CAS 2.5.1 準備工作 2.5.2配置CAS服務器2.5.3配置jboss服務器使用https協議2.5.4 配己置cas客戶端2.5.5測試 SSO 2.6 擴展認證接口及與數據庫結合驗證 2.6.1 如何做擴展部署 2.6.2如何獲取登錄的用戶名 問題或不足 改進意見 附件 .3.3.

2、.......2.1.5、1、文檔摘要1.1 文檔分類技術方案 -關于單點登錄1.2 關鍵字SSO、Yale CAS1.3 使用 SSO 的最終目的1、實現一個易用的、能跨不同 Web 應用的單點登錄認證中心;2、實現統一的用戶身份和密鑰管理,減少多套密碼系統造成的管理成本和安全漏洞;3、降低認證模塊在 IT 系統設計中的耦合度,提供更好的 SOA 設計和更彈性的安全策略1.4 摘要本文描述如何實現多應用系統下的單點登錄具體實現方案1.5 參考Yale CAS網站(http:/www.yale.e

3、du/tp/cas/)及網絡相關技術文檔1.5修改歷史日期版本作者修改內容評審號更改請求號2008-6-181.0許建飛創(chuàng)建2、技術方案 2.1 問題或場景假設目前有多個 WEB 應用系統,采用不同的語言開發(fā),部署在 不同的服務器上;每個系統分別管理著自己的用戶。那么,客戶在使 用不同系統時就必須在不同的系統之間切換, 反復的輸入不同的用戶 名和密碼。在系統集成時如何使用戶只需要認證一次就能登入各個不 同的系統?那么就必須采用用戶身份集中管理、 統一認證, 這就涉及 到單點登錄(single sign-on SSO的問題了。2.2 web SSO 的原理Web SSO主要特點是,SSO應用之間

4、走 Web協議(女口 HTTP /SSL) ,并且 SSO 都只有一個登錄入口。 j簡單的 SSO 的體系中,會有下面三種角色:1 User (多個)2 Web 應用(多個)3 SSO 認證中心( 1 個)雖然 SSO 實現模式千奇百怪,但萬變不離其宗:1、Web 應用不處理 User 的登錄,否則就是多點登陸了,所 有的登錄都在 SSO 認證中心進行。2、SSO 認證中心通過一些方法來告訴 Web 應用當前訪問用戶究竟是不是張三 / 李四3、SSO 認證中心和所有的 Web 應用建立一種信任關系, S SO 認證中心對用戶身份正確性的判斷會通過某種方法告之 Web 應 用,而且判斷結果必須被

5、 Web 應用信任。2.3 CAS 的基本原理從結構體系看, CAS 包含兩部分:CAS ServerCAS Server 負責完成對用戶的認證工作, CAS Server 需要獨 立部署,有不止一種 CAS Server的實現, Yale CAS Server和ESUP CAS Server都是很不錯的選擇。CAS Server會處理用戶名/密碼等憑證(Credentials),它可 能會到數據庫檢索一條用戶帳號信息, 也可能在 XML 文件中檢索用 戶密碼,對這種方式, CAS 均提供一種靈活但同一的接口 / 實現 分離的方式, CAS 究竟是用何種認證方式, 跟 CAS 協議是分離的,

6、也就是,這個認證的實現細節(jié)可以自己定制和擴展。CAS ClientCAS Client 負責部署在客戶端(注意,我是指 Web 應用), 原則上, CAS Client 的部署意味著,當有對本地 Web 應用的受保 護資源的訪問請求,并且需要對請求方進行身份認證, Web 應用不 再接受任何的用戶名密碼等類似的 Credentials ,而是重定向到 CAS Server 進行認證。目前,CAS Clie nt支持(某些在完善中)非常多的客戶端,包括 Java、.Net、ISAPI、Php、Perl、uPortal、Acegi、Ruby、VBScript等客戶端,幾乎可以這樣說,CAS協議能夠

7、適合任何語言編寫的客戶端應用。2.4 CAS協議CAS Clie nt與受保護的客戶端應用部署在一起,以 Filter方 式保護受保護的資源。對于訪問受保護資源的每個 Web請求,CAS Client會分析該請求的 Http請求中是否包含 Service Ticket,如果 沒有,則說明當前用戶尚未登錄,于是將請求重定向到指定好的CAS Server登錄地址,并傳遞 Service (也就是要訪問的目的資源 地址),以便登錄成功過后轉回該地址。用戶在第3步中輸入認證信息,如果登錄成功,CAS Server隨機產生一個相當長度、唯一、 不可偽造的Service Ticket并緩存以待將來驗證,之

8、后系統自動重 定向到 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 協議中還提供了 Pr

9、oxy (代理)模式,以適應更 加高級、復雜的應用場景2.5 配置一個基本的 CAS2.5.1 準備工作下 載 測 試 用的 web 應 用 服務 器 apache-tomcat-6.0.16, jboss-4.2.2.GA;下載 cas-server-3.2.1-relea、secas-client-2.0.11.zi;p 本文通過以上版本舉例說明。2.5.2 配置 CAS 服務器假設將CAS server端部署在jboss下,其他幾個客戶端應用系統分別在 tomcat或者jboss下。由于CAS使用Https協議,所以首先要知道如何在jboss容器 中配置SSL.; CAS勺客戶端以一個

10、Web應用的Filter運行。當Web應 用的某個功能被請求時,Filter就會攔截應用的URL,從而迫使用戶 到CAS服務器進行登陸。在所有不同的 Web應用中,使用同一個CAS 服務器進行登陸,即可達到單點登陸之目的。將 cas-server-321-release.Zp壓,找至U cas-server-321-release/cas -server-3.2.1/modules/cas-server-webapp-3.2.1.wa繼續(xù)解壓它。加解壓 后的文件夾cas-server-webapp-3.2改名為cas.war為了發(fā)布到jboss下 方便,tomcat下直接用這個war壓縮包就行

11、了),啟動jboss服務,測 試CAS服務器是否發(fā)布正常,可以訪問http:/localhost:8080/cas/login出現登陸窗口。輸入用戶名密碼(用戶名=密碼),出現登陸成功 頁面說明發(fā)布正常。2.5.3 配置 jboss 服務器使用 https 協議1、使用Java自帶的keytool命令,產生SERVER的證書D:"> keytool -genkey -alias my-alias-name-keyalg RSA -keystore keystore-file其中my-alias-name為別名,這行命令的作用是產生一個新的公共 / 私有鑰匙對。 keystore

12、-file 為存儲鑰匙和證書的文件。 命令運行后,根據提示回答。注意在開始問“你的名字”或“ DName”的時候,必須填寫你服務器所在域名(在局域網中測試時, 使用主機名或hosts文件中注冊的域名,本機可以使用localhost)。2、到這個目錄下去找server.xml文件打開,相應位置更改如下:<Co nn ector port="8443" protocol="HTTP/1.1" SSLE nabled="true" maxThreads="150" scheme="https"

13、secure="true" clie ntAuth="false"sslProtocol="TLS"keystoreFile="D:/keystore-file"keystorePass="*" />其中,keystoreFile使用絕對路徑或相對路徑(如$jboss.server.home.dir/.), keystorePas為第 3 點輸入的 keystore 密碼。3、配置完成后,啟動就jboss訪問https:/localhost:8443,訪 問成功說明SSL配置成功。也可以訪

14、問https:/localhost:8443/cas/login2.5.4配置cas客戶端以Tomcat中自帶的examples應用為例,在 Web應用中使用配 置CAS客戶端。1、在examples應用里配置 CAS客戶端,需修改 examples/WEB-INF/web.xml,在 web.xml文件中,加入如下 Filter 配置<filter>vfilter- name>CAS Filter</filter- name<filter-class>edu.yale.its.tp.cas.clie nt.filter.CASFilter</filt

15、er-class><i nit-param>vparam-n ame>edu.yale.its.tp.cas.clie nt.filter.logi nU rl</param-n ame><param-value>https:/localhost:8443/cas/log in</param-value></in it-param><i nit-param>vparam-n ame>edu.yale.its.tp.cas.clie nt.filter.validateUrl</param-n ame

16、><param-value>https:/localhost:8443/cas/serviceValidate</param-value></in it-param><i nit-param>vparam-n ame>edu.yale.its.tp.cas.clie nt.filter.serverName</param-n ame> <param-value>localhost:8080</param-value></in it-param>v/filter>vfilter-ma

17、pp ing>vfilter- name>CAS Filterv/filter- namevurl-patter n> /*v/url-patter n>v/filter-mappi ng>其中,第一,二個localhost都改成CAS服務器域名或主機名, 第三個改成你servelt example應用域名或主機名,由于本文中CAS服務器與客戶端在同一主機同一Tomcat上,所以都為localhost若不在同一主機,則分別使用兩主機的域名或主機名。詳細說明如下:表格1. CASFilter必需的參數參數名作用edu.yale.its.tp.cas.client.f

18、ilter.loginUrl指定CAS提供登錄頁面的 URLedu.yale.its.tp.cas.client.filter.validateUrl指定 CAS 提供 service ticket 或 proxy ticket 證服務的URL驗edu.yale.its.tp.cas.client.filter.serverName指定客戶端的域名和端口,是指客戶端應用所在機器而不是CAS Server 所在機器,該參數或serviceUrl少有一個必須指定至edu.yale.its.tp.cas.client.filter.serviceUrl該參數指定過后將覆蓋serverName參數,成

19、為登錄成功過后重定向的目的地址參數名作用xyCallbackUrl用于當前應用需要作為其他服務的代理(proxy)時獲取 Proxy Granting Ticket的地址edu.yale.its.tp.cas.client.filter.authorizedProxy用于允許當前應用從代理處獲取proxy tickets ,該參數接受以空格分隔開的多個proxy URLs ,但實際使用只需要一個成功即可。當指定該參數過后,需要修改validateUrl 至U proxyValidate ,而不再是 serviceVali

20、dateedu.yale.its.tp.cas.client.filter.renew如果指定為true,那么受保護的資源每次被訪問 時均要求用戶重新進行驗證,而不管之前是否已經通過edu.yale.its.tp.cas.client.filter.wrapRequest如果指定為 true,那么CASFilter 將重新包裝HttpRequest,并且使 getRemoteUser()方法返回當前登錄用戶的用戶名edu.yale.its.tp.cas.client.filter.gateway指定gateway 屬性2、將 cas-client20.11.zip解壓,把 java/lib/c

21、asclient.jar 拷貝到 Tomcat 的 webapps/ examples/WEB-INF/lib 目錄下(如果沒有就建一 個)3、執(zhí)行命令行,導出SERVER的證書,用來給所有需要用到 的客戶端導入D:"> keytool -export -file myserver.cert-alias my-alias-name-ke ystore keystore-file4、執(zhí)行命令行,在客戶端的JVM里導入信任的SERVER的證書,(假設你的另外一個應用系統也是用的java,這一步是必須的,否則不能建立兩者之間的信任關系。如果不執(zhí)行下面的命令行,比如在.net環(huán)境下可以

22、考慮將生成的myserver.ce作為IE的證書倒入瀏覽 器看看,需要再試一下)D:"> keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert-alias my-alias-name其中,$JAVA_HOME改成JDK的絕對路徑。路徑當中如果有 空格用雙引號括起來。輸入 keystore密碼時,注意現在的 keystore為cacerts 而 cacer ts的初密碼為changeit而不是前面keystore-file的密碼,所以要是沒 有改過cacerts密碼應該輸

23、入changeit.2.5.5 測試 SSO啟動 Tomcat禾口 jboss,訪問 http:/localhost:8080/servlets-examples/,隨便執(zhí)行一個servlet,系統會自動跳轉到一個驗證頁面,隨便 輸入一個相同的賬號 ,密碼,認證通過之后,就會訪問到你點擊的servlet 了。2.6 擴展認證接口及與數據庫結合驗證CAS Server 負責完成對用戶的認證工作,它會處理登錄時的用戶憑證(Credentials)信息,用戶名/密碼對是最常見的憑證信息。C AS Server 可能需要到數據庫檢索一條用戶帳號信息,也可能在 XM L 文件中檢索用戶名 / 密碼,還可

24、能通過 LDAP Server 獲取等,在這 種情況下, CAS 提供了一種靈活但統一的接口和實現分離的方式, 實際使用中 CAS 采用哪種方式認證是與 CAS 的基本協議分離開 的,用戶可以根據認證的接口去定制和擴展。261如何做擴展部署擴展 AuthenticationHandlerCAS提供擴展認證的核心是Authe nticatio nHan dler接口,具體可查閱源碼,看下面一段demo代碼,擴展認證方法1. public class Usern ameLe ngthAuth nHan dler2. exte nds AbstractUsernamePasswordAuthe nt

25、icatio nHan dler 3. protected boolea n authe nticateUser namePassword Intern al( Usern amePasswordCrede n tials crede ntials) throws Authe nticati on Excepti on 4. /*5. *這里我們完全可以用自己的認證邏輯代替,比如將用戶名/密碼傳入一個SQL語句,向數據庫驗證是否有對應的用戶賬號,只需要將下面的程序替換掉就OK了!6. /7. Stri ng user name = crede ntials.getUser name();8.

26、String password = crede ntials.getPassword();9. String correctPassword = In teger.toStri ng(user nameen gth();10. retur n correctPassword.equals(password);11. 完了記得在 deployerConfigContext.xm中把這個 bean注冊一下,就可用了。另外,查看該xml文件發(fā)現注冊bean時是一個list,如下:<list><bea nclass="org.jasig.cas.authe nticati

27、on .han dler.support.HttpBasedServiceCrede ntialsAuthe nticatio nHan dler" p:httpClie nt-ref="httpClie nt" /><!下面就是系統默認的驗證器配置,你可以替換它,或者增加一個新的ha ndler -><bea nclass="org.jasig.cas.authe nticati on .han dler.support.SimpleTestUsern amePasswordAuthe nticati onHan dler&qu

28、ot; /></list>在這個list中可以配置多個 AuthenticationHandlers這些AuthenticationHandlers形成了一個驗證器鏈,所有提交給CAS的Credentials 信息將通過這個驗證器鏈的鏈式過濾,只要這鏈中有一個驗證器通 過了對Credentials的驗證,就認為這個 Credentials是合法的。這樣的 設計使得我們可以很輕松的整合不同驗證體系的已有應用到同一個CAS上,比如:A驗證器負責校驗alpha系統提交的Credentials它是 基于LDAP服務器的;B驗證器負責校驗beta系統提交的Credentials 它是一

29、個傳統的RDB用戶表認證;C驗證器負責校驗gamma系統提 交的基于RSA證書加密的Credentials 3種完全不同的用戶身份認證 通過配置就可以統一在同一個 CAS服務內JDBC 認證方法用戶的認證信息通常保存在數據庫中, 因此本文就選用這種情況來介紹。將前面下載的 cas-server-3.1.1-release.z包解開后,在 m odules 目錄下可以找到包 cas-server-support-jdbc-3.1.1.ja其提供了通 過JDBC連接數據庫進行驗證的缺省實現,基于該包的支持,我們 只需要做一些配置工作即可實現 JDBC 認證。JDBC 認證方法支持多種數據庫, DB

30、2, Oracle, MySql, Micros oft SQL Server 等均可,這里以 oracle10 作為例子介紹。 并且假設 o racle SID為:mytest,數據庫登錄用戶名:mytest,數據庫登錄密碼:oracle,用戶信息表為:app_use,該表包含用戶名和密碼的兩 個數據項分別為 userName和password如下:我們測試使用的是oracle數據庫,可以選用任何一個支持 JDBC 的數據庫。用scott/tiger登陸sqlplus輸入如下語句創(chuàng)建用戶表和輸入 測試數據:create table app_user(user name varchar(IOO

31、), password varchar(1insert into app_user values('tomcat', 'tomcat'); insert into app_user values('cas', 'cas');commit;打開 deployerConfigContext.xm文件,開始配置1.配置 DataStore<!-add配置數據庫聯接-><bea nid="dataSource"class="org.spri ngframework.jdbc.datasour

32、ce.DriverMa nagerDataSource" destroy-method="close"><propertyn ame="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></prope rty><propertyname="url"><value>jdbc:oracle:thi n: :1521:mytest</value>&l

33、t;/property><property n ame="user name"><value>mytest</value></property><property n ame="password"><value>oracle</value></property></bea n><!-add en d->2.配置 AuthenticationHandler在 cas-server-support-jdbc-3.1.1.ja包中,提供

34、了 3 個基于JDBC 的 AuthenticationHandler,分別為 BindModeSearchDat abaseAuthe nticati onHan dlerQueryDatabaseAuthe nticati onHan dle r, SearchModeSearchDatabaseAuthe nticatio nHan dle其 中 Bi nd ModeSearchDatabaseAuthe nticatio nHan dler 是用所給的用戶名 和密碼去建立數據庫連接,根據連接建立是否成功來判斷驗證 成功與否;QueryDatabaseAuthenticationHand

35、le通過配置一個 SQL語句查出密碼,與所給密碼匹配;SearchModeSearchDatabaseAuthe nticatio nHa ndler通過配置存放用戶驗證信息的表、用戶名字段和密碼字段,構造查詢語句來驗證。使用哪個 AuthenticationHandler,需要在 deployerConfigC on text.xml中設置,默認情況下,CAS使用一個簡單的usern ame二password 的 AuthenticationHandler(就是第 2.5 章節(jié)所談 到的配置),在文件中可以找到如下一行:vbean class二"org.jasig.cas.auth

36、e nticatio n.ha ndler.support.SimpleTestUser namePasswor d AuthenticationHandler" />,我們可以將其注釋掉,換成我們 希望的一個 AuthenticationHandler,比如,使用 QueryDatabase AuthenticationHandler 或 SearchModeSearchDatabaseAuthenticationHan dler可以分別選取下面兩個清單的配置使用 QueryDatabaseAuthenticationHandlervbean class="org.

37、jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> vproperty name="sql" value="select password from app_user where username=?" />vproperty name="dataSource" ref="dataSource" /><bean>使用 SearchModeSearchDatabaseAuthenticationHandler

38、<bean id="SearchModeSearchDatabaseAuthenticationHandler"class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"Iabstract="false" singleton="true" lazy-init="default"Iautowire="default" dependency-check="def

39、ault">I I <property name二"tableUsers">I ; <value> app_user </value> </property>i i <property name="fieldUser">iI <value>userName</value>I </property>i<property name=''fieldPassword">I <value>password

40、</value>i ; </property>1 <property name="dataSource" ref=" casDataSource " />i i </bean>另外,由于存放在數據庫中的密碼通常是加密過的,所以Authe nticatio nHan dler在匹配時需要知道使用的加密方法,在deployerCo nfigCon text.xml文件中我們可以為具體的Authe nticatio nHan dler類配置一個 property,指定加密器類,比如對于QueryDatabaseA

41、uthenticationHandler,可以修改所示:添力口 passwordEncoder<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><property name="dataSource" ref=" casDataSource " /><property name="sql"value="select password from app user where l

42、ower(userName) = lower"/><property n ame="passwordE ncoder" ref="myPasswordE ncoder"/></bea n>其中myPasswordEncoder是對如下清單中設置的實際加密器類的引用:指定具體加密器類<bean id=" myPasswordEncoder "class="org.jasig.cas.authe nticati on .ha ndler.MyPasswordE ncoder"/這里MyPasswordEncoder是根據實際情況自己定義的加密器,實現PasswordEncoder接口及其 encode()方法。熟悉spring的人應該相當對上面的配置感到很親切,因為CAS3也已經aop,配置都是基于SPRING的方式。4、部署依賴包在以上配置完成以后,需要拷貝幾個依賴

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論