1.概述
單點登陸(Single Sign On),簡稱爲 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。 耶魯大學(yale)開發的單點登陸(Single Sign On)系統稱爲CAS(Central Authentication Service)被設計成一個獨立的Web應用程序(cas.war)。 CAS在2004年12月成爲Jasig項目,因此也叫JA-SIG CAS。本文中服務器版本基於4.0.0版本,官網: http://jasig.github.io/cas/4.0.x/index.html
2. CAS 原理和協議 html
CAS 具備如下特色:git
CAS 包含兩個部分: CAS Server 和 CAS Client。github
CAS Server 負責完成對用戶的認證工做, CAS Server 須要獨立部署,有不止一種 CAS Server 的實現。
CAS Server 會處理用戶名 / 密碼等憑證 (Credentials) ,它可能會到數據庫檢索一條用戶賬號信息,也可能在 XML 文件中檢索用戶密碼,對這種方式, CAS 均提供一種靈活但同一的接口 / 實現分離的方式, CAS 到底是用何種認證方式,跟 CAS 協議是分離的,也就是,這個認證的實現細節能夠本身定製和擴展。數據庫
CAS Client 負責部署在客戶端(指 Web 應用),原則上, CAS Client 的部署意味着,當有對本地 Web 應用的受保護資源的訪問請求,而且須要對請求方進行身份認證, Web 應用再也不接受任何的用戶名密碼等相似的 Credentials ,而是重定向到 CAS Server 進行認證。CAS Client 與受保護的客戶端應用部署在一塊兒,以 Filter 方式保護受保護的資源。對於訪問受保護資源的每一個 Web 請求,CAS Client 會分析該請求的 Http 請求中是否包含 Service Ticket,若是沒有,則說明當前用戶還沒有登陸,因而將請求重定向到指定好的 CAS Server 登陸地址,並傳遞 Service (也就是要訪問的目的資源地址),以便登陸成功事後轉回該地址。用戶在第 3 步中輸入認證信息,若是登陸成功,CAS Server 隨機產生一個至關長度、惟1、不可僞造的 Service Ticket,並緩存以待未來驗證,以後系統自動重定向到 Service 所在地址,併爲客戶端瀏覽器設置一個 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新產生的 Ticket 事後,在第 5,6 步中與 CAS Server 進行身份合適,以確保 Service Ticket 的合法性瀏覽器