背景
由於公司項目甲方眾多,各甲方為了統一登錄用戶體系實現單點登錄(SSO)開始要求各乙方項目對接其搭建的CAS單點登錄服務,有段時間對CAS的流程很迷,各廠商還有基於CAS進行二次開發的情況,所以對它的官方文檔進行了一定的學習,記錄下來幫助有需要的同學。
由於CAS的驗簽協議較多,此處將僅使用
驗簽
略過其子流程,感興趣的可以查看官方文檔進行系統學習。
術語
此處將不介紹驗簽相關的術語,約等於CAS1
- CAS (Central Authentication Service) - 中央認證服務器
- SSO (Single Sign On) - 單點登錄
- CAS Client - 集成CAS登錄流程的應用服務
- TGT (Ticket Granting Ticket) - 存在 CAS 服務端的用戶票據,可使用此票據頒發ST
- TGC (Ticket Granting Cookie)- 存在瀏覽器的 Cookie,對應 CAS 服務端的 TGT
- ST (Service Ticket) - 服務票據,CAS為每個登錄成功的應用服務生成唯一票據,對應應用服務的服務名(serverName)
CAS單點登錄流程
單點登錄流程:
1~5步 為首次訪問服務A的單點登錄流程,6~9步為訪問A服務單點登錄成功后再訪問服務B的單點流程
- 用戶通過瀏覽器請求服務A資源
- 服務A校驗發現此請求未認證,重定向瀏覽器到CAS服務端登錄地址
- 用戶通過瀏覽器輸入用戶名密碼,發起登錄請求
- CAS服務端校驗用戶名密碼通過,響應頭會將TGC寫入瀏覽器CAS域名的Cookie中,重定向瀏覽器到
服務A地址 + 服務A的ST
- 服務A向CAS服務端發起校驗ST請求,驗證通過后服務A重定向請求到服務A未攜帶ST的地址,業務響應返回結果
- 用戶通過瀏覽器請求服務B的資源
- 服務B發現此請求未認證,重定向瀏覽器到CAS服務端登錄地址,由於CAS地址的Cookie有TGC,重定向時會被攜帶傳遞給CAS服務端
- CAS服務端校驗TGC發現有對應的TGT,頒發ST給服務B,重定向瀏覽器到
服務B + 服務B的ST
- 服務B向CAS服務端發起校驗ST請求,驗證通過后服務B重定向請求到服務B未攜帶ST的地址,業務響應返回結果
總結
- 用戶登錄成功會創建TGT,由TGT頒發ST。
- 用戶瀏覽器端會保存TGC,它對應一個TGT
- 瀏覽器端存在未過期的TGC,訪問CAS服務端時攜帶TGC,CAS使用TGT頒發ST,實現單點登錄
本文同步於本人博客園(hellxz.cnblogs.com) 與 CSDN(https://blog.csdn.net/u012586326),禁止轉載。