1. 什么是單點登錄?
一般來說,大型的企業會有幾套應用系統,傳統的方案是每個應用實現自己的登錄功能,有自己專用的用戶數據庫,這種就叫做多點登錄。多點登錄導致同一個企業的多個系統都要一一手工登錄,各個系統登錄狀態互不相認,給用戶使用帶來了極大的不便,也增加了公司開發和維護的成本和負擔。

單點登錄(SSO,Single Sign On)則很好地解決了此問題。單點登錄的原理是用戶只需進行一次登錄,就可以訪問所有相互信任的應用系統,非常適用大型企業的多應用系統的使用場景。

2. CAS
目前主流的單點登錄協議有CAS、Oauth2、SAML等。本文主要討論的是基于CAS協議的單點登錄原理。
CAS是Central Authentication Service的縮寫,中央認證服務,一種獨立開放指令協議。CAS 是 耶魯大學(Yale University)發起的一個開源項目,旨在為 Web 應用系統提供一種可靠的單點登錄方法。
CAS的認證流程通過包括幾部分參與者:
Client: 通常為使用瀏覽器的用戶
CAS Client: 實現CAS協議的Web應用, 負責處理對客戶端受保護資源的訪問請求,需要登錄時,重定向到 CAS Server。
CAS Server: 作為統一認證的CAS服務器,需要獨立部署,主要負責對用戶的認證工作
2.1. 基于CAS單點登錄
基于CAS的單點登錄方案大體是:服務器(CAS Server)為 每次登錄請求分配一個登錄票據,合作模塊(CAS Client)拿到該ticket之后,到服務器(CAS Server)驗證該ticket是否合法。

2.2. 基于CAS單點注銷
單點注銷是單點登錄的輔助流程,在一個模塊執行注銷操作即可。單點注銷目前只適合用戶主動觸發的注銷行為(如點擊頁面的注銷按鈕),其他形式的如會話超時過期之類的則無法觸發單點注銷。具體流程如下圖:
