一、概述
單點登入SSO(Single Sign On):單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一,SSO的定義是在多個應用系統中,使用者隻需要登入一次就可以通路所有互相信任的應用系統。
我們目前的系統存在諸多子系統,而這些子系統是分别部署在不同的伺服器中,那麼使用傳統方式的session是無法解決的,我們需要使用相關的單點登入技術來解決。
網絡上對應不同場景的成熟SSO解決方案比比皆是,從簡單到複雜,各式各樣應有盡有。開源的有OpenSSO、CAS ,微軟的AD SSO,及基于kerberos 的SSO等。

SSO特點:
- 一個賬戶:嗯,規定所有系統統一使用相同賬戶,就能保證一個賬戶了;
- 一次登入全部通路:通過SSO登入後,讓其告知其它各個系統儲存該使用者的資訊,使用者就不用重複多次的登入了;
二、主要名詞
1、TGC:Ticket-granting cookie,存放使用者身份認證憑證的cookie,在浏覽器和CAS Server間通訊時使用,是CAS Server用來明确使用者身份的憑證。TGT封裝了TGC值以及此Cookie值對應的使用者資訊。
2、TGT:ticket granting ticket,TGT對象的ID就是TGC的值,在伺服器端,通過TGC查詢TGT。
3、ST:service ticket,CAS為使用者簽發的通路某一service的票據,ST是TGT簽發的。
4、PGT:proxy granting ticket,代理模式下的TGT
5、PT:proxy ticket,代理模式下的ST
6、service:在cas系統中,接入的各個子系統叫服務。因為對普通使用者來說,每一個接入到cas認證中心的子系統都提供特定的服務比如商城、bbs等,大家都聽過軟體即服務,平台即服務,這樣了解service就通順了
SaaS:Software-as-a-Service,軟體即服務
PaaS:Platform as a Service,平台即服務
7、credentials,憑證,即待認證的使用者的資訊載體,如使用者名+密碼
8、Principal,當事人,即認證之後傳回的已認證的當事人的資訊載體,預設隻傳回使用者ID即使用者名。
9、Authentication表示一個完成的認證請求,當然,結果可能是憑證有效或無效,他有一個method可以擷取Principal
三、架構原理
CAS 是 Yale 大學發起的一個開源項目,CAS(Central Authentication Service)是基于Kerberos票據方式實作SSO單點登入的架構,旨在為 Web 應用系統提供一種可靠的單點登入方法,CAS 在 2004 年 12 月正式成為 JA-SIG 的一個項目。CAS 具有以下特點:
【1】開源的企業級單點登入解決方案。
【2】CAS Server 為需要獨立部署的 Web 應用。
【3】CAS Client 支援非常多的用戶端(這裡指單點登入系統中的各個 Web 應用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨立部署,主要負責對使用者的認證工作;CAS Client 負責處理對用戶端受保護資源的通路請求,需要登入時,重定向到 CAS Server。
協定過程架構圖:
- 通路服務:SSO用戶端發送請求通路應用系統提供的服務資源。
- 定向認證:SSO用戶端會重定向使用者請求到SSO伺服器。
- 使用者認證:使用者身份認證。
- 發放票據:SSO伺服器會産生一個随機的Service Ticket。
- 驗證票據:SSO伺服器驗證票據Service Ticket的合法性,驗證通過後,允許用戶端通路服務。
- 傳輸使用者資訊:SSO伺服器驗證票據通過後,傳輸使用者認證結果資訊給用戶端。
從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨立部署,主要負責對使用者的認證工作;CAS Client 負責處理對用戶端受保護資源的通路請求,需要登入時,重定向到 CAS Server。(CAS Client稱之為系統X, CAS Server稱之為認證中心)
首次登陸:
1)浏覽器首次通路系統A,CASFilter截獲請求,A擷取不到JSessionID發現未登入,系統A将浏覽器重定向到認證中心;
2)認證中心擷取全局票據,未擷取到,認定使用者未登入給使用者跳轉到登入頁進行登入。認證成功之後給浏覽器生成一個全局票據(一般存放在cookie中稱之為TGC--Ticket Granting Cookie,出于安全考慮TGC經過加密并且有時效性,關閉浏覽器會自動過期),然後重定向到系統A并且附上臨時票據(Service Ticket由認證中心随機生成并發放給使用者的身份标志是一種一次性信任憑證);
3)系統A的CASFilter截獲請求,擷取臨時票據,擷取到之後将臨時票據傳給認證中心确認(票據由認證中心生成,幾乎不可僞造,标志使用者身份)。認證中心通過認證之後将使用者資訊傳回給系統A,系統A将浏覽器請求授權資源傳回;
已登入狀态通路系統B:
1)浏覽器通路系統B,CASFilter截獲請求,系統B擷取JSessionID,未擷取到,重定向至認證中心;
2)認證中心擷取全局票據,擷取到之後認定使用者已經登入,認證中心發放系統B的臨時票據,并重定向至系統B;
3)系統B擷取臨時票據,擷取到之後将臨時票據傳給認證中心确認,認證中心通過認證之後将使用者資訊傳回給系統B,系統B将浏覽器請求資源傳回;
登出操作:
執行登出操作,目前系統會将登出請求重定向到認證中心(CAS Server),認證中心在收到登出請求後擷取TGC清除對應session,同時通知所有通過此TGC對應的TGT直接或者間接簽發授權的系統(CAS Client)消除session。