資源描述:
《單點登錄_尚學堂cas講義》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、一.SSO(SingleSign-on)原理SSO分為Web-SSO和桌面SSO。桌面SSO體現(xiàn)在操作系統(tǒng)級別上。Web-SSO體現(xiàn)在客戶端,主要特點是:SSO應用之間使用Web協(xié)議(如HTTPS),并且只有一個登錄入口。我們所講的SSO,指WebSSO。SSO的體系中,有下面三種角色:2User(多個)2Web應用(多個)2SSO認證中心(一個)SSO實現(xiàn)模式千奇百怪,但萬變不離其宗,包含以下三個原則:l所有的登錄都在SSO認證中心進行。lSSO認證中心通過一些方法來告訴Web應用當前訪問用戶究竟是不是
2、通過認證的用戶。lSSO認證中心和所有的Web應用建立一種信任關系。二.CAS的基本原理CAS(CentralAuthenticationService)是Yale大學發(fā)起的構建WebSSO的Java開源項目。1.CAS的結(jié)構體系uCASServerCASServer負責完成對用戶信息的認證,需要單獨部署,CASServer會處理用戶名/密碼等憑證(Credentials)。uCASClientCASClient部署在客戶端,當有對本地Web應用受保護資源的訪問請求,并且需要對請求方進行身份認證,重定向到
3、CASServer進行認證。2.CAS協(xié)議基礎協(xié)議上圖是一個基礎的CAS協(xié)議,CASClient以過濾器的方式保護Web應用的受保護資源,過濾從客戶端過來的每一個Web請求,同時,CASClient會分析HTTP請求中是否包請求ServiceTicket(上圖中的Ticket),如果沒有,則說明該用戶是沒有經(jīng)過認證的,CASClient會重定向用戶請求到CASServer(Step2)。Step3是用戶認證過程,如果用戶提供了正確的認證信息,CASServer會產(chǎn)生一個隨機的ServiceTicket,會
4、向User發(fā)送一個Ticketgrantingcookie(TGC)給User的瀏覽器,并且重定向用戶到CASClient(附帶剛才產(chǎn)生的ServiceTicket),Step5和Step6是CASClient和CASServer之間完成了一個對用戶的身份核實,用Ticket查到Username,認證通過。1.CAS如何實現(xiàn)SSO當用戶訪問Helloservice2再次被重定向到CASServer的時候,CASServer會主動獲到這個TGCcookie,然后做下面的事情:1)如果User的持有TGC且其
5、還沒失效,那么就走基礎協(xié)議圖的Step4,達到了SSO的效果。2)如果TGC失效,那么用戶還是要重新認證(走基礎協(xié)議圖的Step3)。二.實踐配置下面我們以tomcat5.5為例進行說明(這里,我將Server和Client同時放在了同一個Tomcat服務器下)。軟件環(huán)境:tomcat5.5ant-1.6.5,jdk1.5.0_06下載cas-server-3.0.4.zip和cas-client和cas-server-jdbc-3.0.5-rc2.jar和mysql5.0.16和tomcat5.5.15
6、http://www.ja-sig.org/downloads/cas/cas-server-3.0.4.ziphttp://www.yale.edu/tp/cas/cas-client-2.0.11.ziphttp://developer.ja-sig.org/maven/cas/jars/cas-server-jdbc-3.0.5-rc2.jarhttp://www.mysql.comhttp://tomcat.apache.org/(一)將一個或者一些頁面進行支持HTTPS傳輸協(xié)議(意義:對某些頁面
7、進行了安全傳輸)(重點掌握)1.產(chǎn)生SERVER的證書庫文件keytool-genkey-aliastomcat-keyalgRSA[-keystorekeystore-file]并將證書文件放在web容器的目錄下。2.(在server端)配置tomcat使用HTTPS$CATALINA_HOME/conf/server.xml里8、keystore"maxThreads="150"minSpareThreads="25"maxSpareThreads="75"enableLookups="false"disableUploadTimeout="true"acceptCount="100"scheme="https"secure="true"clientAuth="false"sslProtocol="TLS"/>注意:keystorePass="chan