




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
SSO單點登錄技術研究報告-基于CAS框架的分析與技術研究目錄TOC\o"1-5"\h\z引言4摘要4..范圍4..讀者對象4.關鍵詞4..技術背景4CAS單點登錄簡介(針對實踐選擇的技術)6技術快速使用說明6.設置服務器域名10生成證書(這里采用JDK自帶的工具keytool)11為客戶端JVM導入證書12將證書應用到Web服務器Tomcat12部署CAS服務器13深入配制CAS服務器13配制CAS客戶端14用到的jar包18CAS深入研究18開發(fā)環(huán)境的配置24運行環(huán)境的配置24結束語247參考文獻251引言摘要單點登錄(Singlesignon),簡稱SSO,是目前比較流行的企業(yè)業(yè)務整合的解決方案之一。SSO的定義是在多個系統(tǒng)中,用戶只需要登錄一次就可以在各各相互信任的系統(tǒng)中進行切換。本文主要介紹它的簡單部署以及源碼分析,邏輯分析。官網:/cas范圍單點登錄的配置、登錄方式、項目之間建立的信任關系。單點登錄的客戶端服務端處理邏輯,源碼分析。讀者對象技術組人員關鍵詞CAS、SSO、單點登錄2技術背景技術原理當用戶第一次訪問系統(tǒng)時,因為還沒有登錄,所以會被引入到認證系統(tǒng)中進行登錄,根據用戶提供的身份信息,系統(tǒng)進行校驗,如果通過效驗則返回給用戶一個Ticket認證憑據,用戶再次訪問別的系統(tǒng)時就會將此Ticket帶上做為自己的認證憑據送到認證系統(tǒng)中進行效驗,檢查Ticket的合法性,如通過效驗則不必登錄直接進入第二個系統(tǒng)。目前主要流行的產品列表AccessMatrixUSO(byi-SprintInnovations)AthensaccessandidentitymanagementCentralAuthenticationService(CAS)COMACoSignDistributedAccessControlSystem(DACS)EnterpriseSignOnEngineEvidianEnterpriseSSOFacebookconnectFreeIPAGlobalLoginSystemImprivataOneSign(Enterprisesinglesign-onandstrongauthentication)JBossSSOJOSSO(OpenSourceSingleSign-OnServer)KerberosmyOneLogin(Securesinglesign-onforthecloud)OneLogin(singlesign-onanduserprovisioningforthecloud)OpenAM(previouslyOpenSSO)OpenASelectPasslogixSAMLSecureNetworkCommunicationsShibbolethSmartcardTigerOneConnectUbuntuSingleSignOn(OpenID-basedsinglesignonservice)WindowsLiveID在項目中做出的技術選擇以及原因選擇的技術:CAS原因:項目開源、企業(yè)中用此技術的比較多、較穩(wěn)定、網絡參考資料較多。3CAS單點登錄簡介(針對實踐選擇的技術)技術快速使用說明Http配置教程1.首先是需要在CAS服務器配置是CAS服務器端支持http協(xié)議方式主要改進一下配置文件:ticketGrantingTicketCookieGenerator.xml配置文件:[html]viewplaincopyprint?|<beanid="ticketGrantingTicketCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"[p:cookieSecure="true"3p:cookieMaxAge="-1"4p:cookieName="CASTGC"、p:cookiePath="/cas"/>將這個地方的配置改為下面的配置:[html]viewplaincopyprint?<<beanid="ticketGrantingTicketCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="false"Sp:cookieMaxAge="-1"9p:cookieName="CASTGC"10p:cookiePath="/cas"/>warnCookieGenerator.xml配置文件[html]viewplaincopyprint?.1.1<beanid="warnCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"I--p:cookieSecure="true".1\p:cookieMaxAge="-1"Hp:cookieName="CASPRIVACY"l;p:cookiePath="/cas"/>將這個地方的配置改為下面的配置:[html]viewplaincopyprint?16<beanid="warnCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"11'p:cookieSecure="false"
3p:cookieMaxAge="-1"19p:cookieName="CASPRIVACY"配置文件:pp:cookiePath="/cas"/>配置文件:deployerConfigContext.xml[html]viewplaincopyprint?,■1<beanclass="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"二p:httpClient-ref="httpClient"二/>將這個地方的配置文件修改為下面的配置:[html]viewplaincopyprint?Q<beanclass="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler",V.'p:httpClient-ref="httpClient"6p:requireSecure="false":/>完成這些地方的修改后,服務器端就支持了http協(xié)議的訪問了下面開始客戶端的改動,客戶端其實就是將client.jar包里面關于https協(xié)議的處理代碼給屏蔽掉,已經重新打jar包出來了,直接就能使用。原理如下??催^CAS客戶端的源碼的都知道,在配置過濾器類中,都做了訪問協(xié)議的判斷如下代碼:[html]viewplaincopyprint?1if(casServiceUrl!=null){2if(!(casServiceUrl.startsWith("https://")||(casServiceUrl.startsWith("http://")))){3thrownewServletException("serviceURLmuststartwithhttp://orhttps://;itscurrentvalueis["+casServiceUrl+"]");-}、}所以首先我們要做的是需要將casclient.jar的源碼找到,將上面類似的這種協(xié)議判斷屏蔽掉。具體在一下2個類里面:第一個是:CASFilter這個類里面中的init()方法中,https的判斷屏蔽后如下:[html]viewplaincopyprint?(1if(casGateway&&Boolean.valueOf(casRenew).booleanValue()){thrownewServletException("gatewayandrenewcannotbothbetrueinfilterconfiguration");TOC\o"1-5"\h\z、}■:,if(casServerName!=null&&casServiceUrl!=null){.1tthrownewServletException("serverNameandserviceUrlcannotbothbeset:chooseone.");11}I,?if(casServerName==null&&casServiceUrl==null){,13thrownewServletException("oneofserverNameorserviceUrlmustbeset.");14}l;/*if(casServiceUrl!=null){:if(!(casServiceUrl.startsWith("https://")||(casServiceUrl.startsWith("http://")))){,1■■■'thrownewServletException("serviceURLmuststartwithhttp://orhttps://;itscurrentvalueis["+casServiceUrl+"]");TOC\o"1-5"\h\z4};}*/20,Tif(casValidate==null){上工thrownewServletException("validateUrlparametermustbeset.");二}/*if(!casValidate.startsWith("https://")){,V-'thrownewServletException("validateUrlmuststartwithhttps://,itscurrentvalueis["+casValidate+"]");:■}1*/二Sif(casAuthorizedProxy!=null){為//parseandrememberauthorizedproxies'JStringTokenizercasProxies=S2newStringTokenizer(casAuthorizedProxy);丁:while(casProxies.hasMoreTokens()){MStringanAuthorizedProxy=casProxies.nextToken();/*if(!anAuthorizedProxy.startsWith("https://")){26thrownewServletException("CASFilterinitializationparameterforauthorizedproxies"+TOC\o"1-5"\h\z37"mustbeawhitespacedelimitedlistofauthorizedproxies."+3s"Authorizedproxiesmustbesecure(https)addresses.Thisonewasn't:["+anAuthorizedProxy+"]");⑤}*/笛this.authorizedProxies.add(anAuthorizedProxy);41}登}第二個是:edu.yale.its.tp.cas.util.SecureURL這個類里面的retrieve方法中,屏蔽后如下:[html]viewplaincopyprint?43URLu=newURL(url);4!/*if(!u.getProtocol().equals("https")){//lOExceptionmaynotbethebestexceptionwecouldthrowhere//sincetheproblemiswiththeURLargumentwewerepassed,not//IO.-awp94slog.error("retrieve("+url+")onanillegalURLsinceprotocolwasnothttps.");⑧thrownewIOException("only'https'URLsarevalidforthismethod");50}*/51立URLConnectionuc=u.openConnection();重新打包后將casclient.jar更新到我們的程序第三方lib包中。做完這些,就能達到能讓服務器利用http協(xié)議進行登錄cas服務端的效果。Https配置教程設置服務器域名修改hosts文件在SERVER端C:\\Windows下搜索hosts文件,并在最后邊一行加上如下內容castest#Server同樣在CLIENT端也應有相對應的設置:SERVERIPcastest#client(這里的SERVERIP是指服務端的IP)生成證書(這里采用JDK自帶的工具keytool)簡述:CAS單點登錄系統(tǒng)中服務端與客戶端進行安全通信的保障就是證書鑰匙,這里的證書是采用JDK所自帶的keytool生成的證書,如果是在正式環(huán)境中部署應去供應商處購頭。官網:/cn/生成服務器端證書文件Keytool-genkey-aliasserver-keyalgRSA-keystoreserverkeyC:\csa>keytoDl-genkey-aliasserver-keyalgrRSA-keystoreserverlkey俞入keystare密詢:瞅播人新密晚西的曷字與姓氏是什么?[llnknoun]*castest您的組織單位名耕是什么?[Unknoun];faundei*您的組織名稱是什么?[Unknoun]?founder您所在的城市或區(qū)域名稱是什么?[Unknown1>hj您所在的州或省份名稱是什么?[Unknown]-hj該單位的兩字母國家代碼是什么[Unknown]-cmCN=castest,OU=founder0=founder,L=bj,ST=bjuC=cn正確嗎?[否L夕輸入VsefUHP》的主密科(文噪和heystore密碼相同,接回車):再次輸入新密弱:注:這里的名字與姓氏最好填寫域名,嚴禁使用IP,此處密碼采用的是changeit與JDK默認密碼一致,可隨意設置(不要忘記)。導出服務端證書Keytool-exportdileserver.crt-aliasserver-keystoreserverkey
C:XsaAkeytool-export-filesepuer.crt-aliasser^uer-JceystoreserMerke^植入key等七ofc密石3:保存在文件中的認證<server.crt>注:此處密碼與上方設置密碼相同為客戶端JVM導入證書-fileserver.crt-aliasserver將生成的server.crt文件分發(fā)給各個客戶端后,使用CMD命令為JVM導入證書。-fileserver.crt-aliasserverKeytool-import-keystore%java_home%\jre\lib\cacerts視個人情況而定,網上好多帖子都說是jre下的cacerts而不是jdk/jre/cacerts,這主要是看tomcat用哪個jre,視個人情況而論。此所用到的是jdk中的jreD1:Seas^keytool-import-keystorecacei'ts-Fileserver-ci't-aliasserver輸/\kcy5七口pc密科:翻嗡入新密碼「^=CN=castest,OU=foundei',0=Founder,L=bjfST=bj,C=cn簽發(fā):CN=castestOU=fcmndeK,O=Founder,L=hj.ST=bJ^G=cn序列號:4d632429有效期二TueFeb221H3CST2Hli至HonM”2310:49=13GST2011證書指紋二MD5:66:F4;6D;35:7F:F4;80;6A:33;?E:10:C5:21:08;60:B4SHftl:0C:6A:3D:6F:CE:02:B7:lA:lF:51H7:67:B9:2F:32:AF:C8:2-1:lC=E4簽名算法名稱:SHfUoithRHP版本13信任這個次證?[否Ly認證已添加至Me界七口re中也可以自己指定目錄,創(chuàng)建完cacerts后再將其復至到jre/lib/security/也可以。但這樣會覆蓋JDK原有的證書(不建議使用)至此基本環(huán)境已經配好。注:此部署是在客戶機上導入,不需要在服務器中導入。將證書應用到Web服務器Tomcat啟用Tomcat的https加密協(xié)議,至于為什么加密自己去GOOGLE一下。將Tomcat下的conf/server.xml里如下代碼的注釋去掉,并加入證書的路徑和密碼。<Connectorputs"&443"SSLEnabled=rrtruer*?axTtiread3?FrL50rrminSpareThreads=rr25rraaxSpareTlireads-'^S"enableLookups=P|false"disab1eUp1□adTineout=1true,facGept£ount='r100r,debugsrr0rrsecure=rTtrueT,rclientAut!i=rrfalserrsslProtocol-'TLS^keYstoEeFile=F,conf/sErveLkey,ikeystolePass=f,changeOK,這樣SSL就啟用成功了,可以進入https:〃castest:8443/查看一下是否啟用成功注:此步客戶端與服務端都需要配置,直接將服務器端生成的文件發(fā)給客戶端使用即可,此處所用到的serverkey是在服務端生成的證書文件,密碼為自定義設置的密碼部署CAS服務器CAS服務端下載:/cas/download下載的包解壓后,將cas-server-3.4.5\modules\cas-server-webapp-3.4.5.war復制至Uwebapps目錄下,重命名為cas.war啟動TOMCAT訪問地址:https:〃castest:8443/cas/login輸入admin/admin(用戶名和密碼相同即可)后即可登錄,登錄成功后的頁面為:JA5ICCentralAuthenticationService(CAS)怩已羥成功暨錄中央u證系疏.出于安全考慮*一旦悠訪問過田喳需要您覆供憑證信息的應用時,諸操作充成之后關閉瀏覽器口如果沒有成功,請仔細檢查上邊的步驟深入配制CAS服務器上邊的登錄只是CAS默認的登錄,在我們的系統(tǒng)應用中都是從數據庫中獲取的信息,所以這里需要更改一下配置。將deployerConfigContext.xml中的如下行注釋掉:Leanclass=rorg*jasig.cas*authentication,handler.supportiSimpLeTs.atUsernauiePasswo工dAuthenticationHandlb工"加入代碼,見附件1將所用連接的數據庫驅動和cas-server-support-jdbc-.jar放入工程中的lib下perties中使用哪種數據庫就將相應驅動前邊的#去掉配制CAS客戶端http配置使用cas-client-http.jarhttps配置使用cas-client-https.jar,地址:/downloads/cas-clients/,然后解壓cas-client-320.zip,在modules文件夾中有需要的jar包,請根據自己的項目情況選擇使用設置web.xml的filter如下<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"version="2.5"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><!--解決中文亂碼問題--><filter><filter-name>springfilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param</filter><filter-name<filter-name>springfilter</filter-name><url-pattern>/*</url-pattern></filter-mapping<!--解決中文亂碼問題--><!--用于單點退出--><listener><listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class></listener><filter>filter-name>CASSingleSignOutFilter</filter-name>filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>/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><!--loginUrl:服務端tomcat所啟動的ip和port-->41:8080/casServer/login/param-value></init-param><init-param><param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value><!--validateUrl:服務端tomcat所啟動的ip和port-->http:〃41:8080/casServer/serviceValidate</param-value></init-param><init-param><param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name><!--client:port就是需要cas需要攔截的地址和端口,一般就是本客戶端tomcat所啟動的ip和port--><param-value>41:8080</param-value></init-param></filter><filter-mapping><filter-name>CASSingleSignOutFilter</filter-name><url-pattern>/*</url-pattern><url-pattern>/*</url-pattern></filter-mapping<filter-name<filter-mapping<filter-name>CASFilter</filter-name><url-pattern>/*</url-pattern><url-pattern>/*</url-pattern></filter-mapping<servlet>
<servlet-name<servlet-class>Query</servlet-name><servlet-name<servlet-class</servlet><servlet-mapping>servlet-name>Query</servlet-name>url-pattern>/query</url-pattern></servlet-mapping><welcome-file<welcome-file-list>index.jsp</welcome-file><welcome-file</welcome-file-list</web-app>只需改動web.xml里面的對服務端和客戶端的ip地址以及端口號,即可完成客戶端的部署。用到的jar包CASCLIENT:casclient-2.1.1.jar、cas-client-core-3.2.0.jar、commons-logging-1.1.jarCASSERVER:cas-server-support-jdbc-3.4.5.jar、cas-server-support-ldap-3.4.5.jar數據庫.jar、cas-server-core-3.4.5.jarOTHERS:根據自己項目需要進行其它JAR包的添加。CAS深入研究CAS的配置并沒有深入的研究,如果感興趣可以了解一下servlet-name>Query</servlet-name>servlet-class>servlet.Query</servlet-class></servlet><servlet-mapping>servlet-name>Query</servlet-name>url-pattern>/query</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>只需改動web.xml里面的對服務端和客戶端的ip地址以及端口號,即可完成客戶端的部署。用到的jar包CASCLIENT:casclient-2.1.1.jar>cas-client-core-3.2.0.jar>commons-logging-1.1.jarCASSERVER:cas-server-support-jdbc-3.4.5.jar、cas-server-support-ldap-3.4.5.jar數據庫.jar、cas-server-core-3.4.5.jarOTHERS:根據自己項目需要進行其它JAR包的添加。CAS深入研究CAS的配置并沒有深入的研究,如果感興趣可以了解一下SSO單點登錄訪問流程主要有以下步驟:.訪問服務:瀏覽器向SSO客戶端發(fā)送請求訪問應用系統(tǒng)提供的服務資源。.定向認證:SSO客戶端會重定向用戶請求到SSO服務器。.用戶認證:SSO服務器進行用戶身份認證。.發(fā)放票據:SSO服務器會產生一個隨機的ServiceTicket,并寫入用戶瀏覽器.驗證票據:SO服務器驗證票據ServiceTicket的合法性,驗證通過后,允許客戶端訪問服務。.傳輸用戶信息:SSO服務器驗證票據通過后,傳輸用戶認證結果信息給客戶端。.單點退出:用戶退出單點登錄。我們把SSO訪問流程我們分為5種實例情況介紹,這5種實例應當可以比較全面地展示SSO訪問實現的機制。登錄點首次訪問、登錄點二次訪問、單點首次訪問、單點二次訪問、單點退出。登錄點首次訪問
L1問服務~~ScrViUcnnipiir]>*亡、立門心門?-null窗一錄!/;IHJSsowrvgr】ogin?ser\iec=Jt!paraeh:2.定向認丁H》認詛:成錄^Credential以L1問服務~~ScrViUcnnipiir]>*亡、立門心門?-null窗一錄!/;IHJSsowrvgr】ogin?ser\iec=Jt!paraeh:2.定向認丁H》認詛:成錄^Credential以“yr2,1凸聿i-Jc『丫w產&;par:un!CtcdcnrmlTGTScn'icc^ST3.用戶認二,發(fā)任;據Cookic(TGC)兼征京據成功5盼計黑帆jSesiiJOEHuser1I“rvkje訪。:XtrillUTtrrlT
f
I
I6件輸用戶信用說明:用戶首次訪問”登錄點“Systeml,SSO客戶端過濾器檢測到當前web應用(Systeml)中的session沒有用戶上下文存儲信息,于是將請求地址包裝為service參數,轉向SSO服務器”定向認證“,訪問SSO服務器登錄頁面,用戶錄入用戶名、密碼等憑證信息,提交給SSO服務器,SS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中原地產手房買賣合同
- 學校采購校服合同
- 工地門窗安裝合同
- 建設工程勞務分包合同
- 場地汽車租賃合同
- 污水處理廠施工合同
- 漳州理工職業(yè)學院《飛機液壓與燃油系統(tǒng)》2023-2024學年第二學期期末試卷
- 漳州理工職業(yè)學院《室內模型設計》2023-2024學年第二學期期末試卷
- 江西水利職業(yè)學院《現代儀器分析綜合實驗》2023-2024學年第二學期期末試卷
- 北京郵電大學世紀學院《物流管理》2023-2024學年第二學期期末試卷
- CentOS 7系統(tǒng)配置與管理(Linux 試題庫) 習題答案 (楊海艷 第2版)
- 中國氫內燃機行業(yè)發(fā)展環(huán)境、市場運行格局及前景研究報告-智研咨詢(2024版)
- 開學季初三沖刺中考開學第一課為夢想加油課件
- 2025年四川綿陽科技城新區(qū)投資控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 2024年湖南高速鐵路職業(yè)技術學院高職單招數學歷年參考題庫含答案解析
- 2024年沙洲職業(yè)工學院高職單招語文歷年參考題庫含答案解析
- 2024年廣東省《輔警招聘考試必刷500題》考試題庫【學生專用】
- 2025年人教版英語五年級下冊教學進度安排表
- 水文工程施工方案
- 學校食堂餐廳管理者食堂安全考試題附答案
- 2025延長石油(集團)限責任公司社會招聘高頻重點提升(共500題)附帶答案詳解
評論
0/150
提交評論