趙侃侃 戴佳男
摘要:單點登錄(SSO)技術已成為現今Web應用系統廣泛采用的集中認證授權技術,在比較分析了4種典型的單點登錄實現方案的基礎上,選擇并改進了基于CAS協議的單點登錄系統。由于前后端分離開發部署的Web應用不能直接使用CAS協議的單點登錄系統,改進并重新封裝了基于CAS協議的單點登錄系統客戶端插件,使之既能支持前后端分離開發部署的Web應用,也能支持前后端集中開發部署的Web應用直接使用而無需應用修改代碼,實現了應用的無侵入性集成CAS協議的單點登錄系統功能。
關鍵詞:單點登錄;Web應用;CAS協議
中圖分類號:TP393文獻標志碼:A文章編號:1008-1739(2020)09-68-4

0引言
隨著B/S架構的Web應用系統越來越廣泛地普及和發展,“一次驗證,多次登陸”的單點登錄技術[1]也應運而生。單點登錄技術是用戶只登錄一次,就可以訪問所有接入單點登錄服務的應用系統的技術。通過建立一個集中的認證服務器,并在應用系統中配置請求攔截器等方式驗證用戶的登錄狀態并控制請求的跳轉功能,從而實現單點登錄功能。單點登錄功能不需要用戶記憶各大應用系統的不同的用戶名和密碼,減少了用戶在多個系統間登錄的操作。另外,單點登錄技術抽取了用戶認證和授權功能,第三方接入單點登錄服務的Web應用系統將認證授權功能交由單點登錄系統處理,這樣有助于第三方應用更加專注自身業務的設計和開發。對于多套應用系統的企業來說,單點登錄功能也被很多企業,尤其是國外的相關企業采用,這是作為應用系統設計初期就必須具備的基本功能[2]。
1常用單點登錄方案
目前常用的幾種單點登錄協議有基于SAML協議的單點登錄方案[3]、基于Kerberos身份認證機制的單點登錄方案[4]、基于Passport協議的單點登錄方案[5]及基于CAS協議的單點登錄方案[6]。
SAML是一種基于XML標準的安全斷言標記語言,用于安全傳輸聲明。SAML主要作用包括認證聲明、屬性聲明和授權聲明,但是SAML協議的單點登錄方案應用起來較為復雜,并且代碼沒有開源,改造十分困難。Kerberos協議是由MIT為Athena項目設計的身份認證系統,但該協議只認證不鑒權。基于Passport協議的單點登錄是由微軟公司運行的一種Web服務,通過在瀏覽器端設置Cookie的方法實現單點登錄功能。基于Passport協議的單點登錄能夠集中通過微軟認證的第三方應用,并儲存用戶登錄信息(如用戶名和密碼),但該方案目前代碼沒有開源,使用該Passport服務仍需收費。基于CAS協議的單點登錄方案是由耶魯大學發起的一個企業級的單點登錄系統,該項目于2001年開始,迄今已經發展到6.X.X版本,在GitHub上不斷地完善和升級。該項目使用Java語言,采用Spring Web Flow等技術,支持CAS,REST等協議。該協議配置應用簡單、代碼結構清晰、使用改造成本低,因此基于該協議的單點登錄方案已被廣泛采用。
2基于CAS協議的單點登錄
2.1 CAS協議單點登錄認證原理
基于CAS協議的單點登錄系統通過在Cookie中存儲登錄憑證CASTGC,并在服務端存儲用戶登錄后生成的臨時和持久票據信息實現單點登錄功能。CAS協議提供的客戶端插件基于過濾器的實現原理,在傳統前后端集成在一起的應用中易于使用,當用戶未登錄或登錄失效時,可直接通過服務端重定向至登錄頁面。
基于CAS協議的單點登錄系統中,只有服務端才能獲取用戶的用戶名、密碼等安全信息,第三方接入的應用系統沒有登錄入口,只接收服務端的間接授權。間接授權通過令牌實現,服務端驗證用戶的用戶名和密碼是否匹配,匹配后創建授權令牌,在接下來的跳轉過程中,授權令牌作為參數發送給各個應用系統,若應用系統拿到令牌,即得到了授權,局部會話即可創建成功,此過程就是基于CAS協議的單點登錄驗證原理,如圖1所示。
用戶訪問應用系統1時,應用系統1發現用戶未登錄,跳轉至CAS服務端,并將該用戶訪問應用系統1的地址作為參數傳入。CAS服務端檢測到用戶未登錄,將瀏覽器頁面跳轉至登錄頁面,用戶輸入用戶名、密碼提交申請至CAS服務端進行認證,認證校驗成功后,創建用戶與CAS服務端的會話,該會話為全局會話,同時創建授權令牌,CAS服務端將攜帶令牌跳轉至用戶最初的請求頁面。
應用系統1拿到令牌后,至CAS服務端校驗令牌是否合法,校驗有效后將結果返回給應用系統1,應用系統1將使用該令牌創建與用戶的局部會話,并跳轉至登錄后的頁面。當用戶再次訪問應用系統2時,應用系統2發現該用戶未登錄,將用戶訪問的應用系統2的地址作為參數一起發送至CAS服務端,CAS服務端發現該用戶已登錄過,則帶著令牌跳轉回應用系統2,應用系統2拿到令牌后再發送給CAS服務端校驗令牌有效性,令牌若有效,用戶即可訪問應用系統2的頁面,無需再次登錄。

2.2存在的問題
隨著前后端分離開發部署模式的不斷興起,越來越多的Web應用選用前后端分離的模式進行開發部署,前后端之間的交互僅通過REST接口,主要好處是便于降低前后端代碼間的耦合度、部署和維護,以及后端項目的拓展升級。但針對這種前端和后端之間只通過接口進行交互的Web應用,如果使用傳統的CAS協議單點登錄功能,后端則無法直接控制前端進行重定向,必須通過接口的方式通知前端進行重定向的動作以及重定向的URL,前端再通過解析該接口的內容進行跳轉。
雖然前后端分離Web應用已逐步流行,但傳統的前后端集中部署的模式仍然占有很大的比例,因此,需要改進傳統的基于CAS協議的單點登錄系統,使之既能支持傳統模式的Web應用,也能支持前后端分離部署的Web應用。
3支持多模式單點登錄系統
基于CAS協議的單點登錄方案利用瀏覽器客戶端進行訪問的重定向和跳轉,而前后端分離部署的Web應用無法直接控制瀏覽器的重定向和跳轉,因此,該協議對于支撐前后端分離部署的Web應用完成單點登錄功能存在問題。
支持多模式單點登錄系統分為3部分:①CAS認證中心:用于應用的授權管理以及用戶認證,集中部署在一個中心點或采用CAS服務器集群的模式進行部署;②第三方Web應用:需要連接CAS認證中心進行單點登錄認證的應用,數量為一個或多個;③改進的CAS認證客戶端:原始的CAS認證客戶端只提供了過濾器的方法(插件模式)用于前后端集中部署應用進行單點登錄認證,本文改進了原始的CAS客戶端,同時提供了2種用戶認證的方法,一種是原有的插件模式進行認證,另一種是接口調用模式進行認證,分別用于支持前后端集中部署應用以及前后端分離部署應用。另外,改進的CAS認證客戶端還包含一個前端適配插件,用于攔截用戶請求、判斷是否登錄、解析后端認證結果及重定向至登錄頁面,如圖2所示。
在第三方Web應用系統配置使用模式后,可使應用系統運行于接口模式或者插件模式。在接口模式下,應用系統應首先在配置文件中配置CAS服務端URL。其次,當應用系統集成的CAS客戶端接收并解析CAS服務端的返回值后,將該返回值封裝成接口,再由前端插件調用該接口并解析結果后實現頁面跳轉等操作,完成單點登錄功能,其中,CAS客戶端封裝的接口主要包括用戶登錄接口、用戶退出接口、判斷用戶是否登錄接口、獲取用戶信息接口及獲取用戶票據接口等。
如果用戶未登錄,CAS客戶端將訪問頁面URL作為參數傳遞至前端插件,并由前端插件讀取配置文件中的CAS服務端地址,并重定向至登錄頁面URL。如果用戶已登錄,CAS客戶端插件會攔截該請求,從請求中獲取與用戶對應的標志信息并判斷該請求中所攜帶的標志信息是否合法和有效用戶是否存在有效登錄信息,如果合法有效已經存在,則請求通過,并將已登錄標志信息作為請求接口參數傳遞至前端插件。在插件模式下,應用系統直接通過CAS客戶端控制前端頁面的跳轉實現單點登錄功能,也就是傳統的CAS客戶端提供的功能。如果用戶未登錄,CAS客戶端將訪問頁面URL作為參數直接跳轉至登錄頁面。如果用戶已登錄,且判斷該用戶的登錄信息合法后,將該標識信息設置在請求中的Cookie中傳遞。另外,對于使用C++或者php等非Java語言開發的應用,也可以通過接口模式進行單點登錄功能接入。
4認證流程
4.1插件模式
①當用戶訪問APP1時,由于已配置部署模式,CAS認證中心客戶端根據該模式選用過濾器的方式進行請求攔截,若APP1服務端已存在有效票據,則說明已登錄,訪問通過;否則,過濾器將攔截請求并重定向到CAS認證中心登錄頁面。
②用戶登錄成功后,CAS認證中心生成登錄票據,同時,CAS認證中心在瀏覽器端的Cookie中寫入登錄票據ID,并根據登錄票據和請求來源生成臨時票據作為參數跳轉回APP1。
③APP1的CAS認證中心客戶端獲取到臨時票據后,發送至CAS認證中心進行驗證。
④CAS認證中心驗證臨時票據后,返回登錄票據。
⑤APP1的CAS認證中心客戶端接收到登錄票據,并重定向到原始請求鏈接和通過。
⑥用戶首次訪問另一應用APP2時,由于APP2當前沒有有效票據,APP2將請求重定向至CAS認證中心判斷該次請求是否已登錄。
⑦CAS認證中心在接收到請求后,從Cookie中獲取票據ID,并根據票據ID查找票據,驗證有效票據是否存在。
⑧當票據存在時,證明已登錄,APP2根據票據以及請求來源應用生成臨時票據,并將該臨時票據添加到應用系統的請求URL中并跳轉;當票據不存在時,則會重定向至CAS認證中心登錄頁面重新進行登錄。

⑨APP2接收到包含有臨時票據的請求后,從請求鏈接中提取臨時票據并發送至CAS認證中心驗證。

上述描述了支持多模式的單點登錄系統,該單點登錄系統改進實現了基于CAS協議的單點登錄系統。該方法通過修改和增加客戶端插件和前端插件,將用戶請求進行攔截和處理,而不需要應用程序修改代碼與CAS服務器交互進行邏輯校驗,實現了前后端分離開發部署的Web應用和前后端集中開發部署的Web應用的無侵入性集成單點登錄功能。
5結束語
本文所描述的支持多模式的單點登錄系統,實現了前后端分離開發部署的Web應用和前后端集中開發部署的Web應用的無侵入性集成單點登錄功能,但是還需根據工作實際,進一步完善諸如完整的日志審計、日志導出功能,實現用戶操作的可追溯性,提高系統的安全性。此外,票據信息的中心化存儲對高并發訪問條件下服務器的穩定性、可擴展性以及安全性也帶來了挑戰,能夠支持高并發、分布式的單點登錄服務器集群,提供一個更加可靠且安全的單點登錄系統也是必須考慮的。
參考文獻
[1]林滿山,郭荷清.單點登錄技術的現狀及發展[J].計算機應用,2004(S1):248-250.
[2]蘇悅洪.基于CAS協議的單點登錄系統的研究與改進[D].廣州:華南理工大學,2014.
[3] WU KX, YU XL. A Model of Unite-authentication Single Sign-on Based on SAML Underlying Web[C]// Proceedings of the 2009 Second International Conference on Information and Computing Science, 2009(2):211-213.
[4]崔培枝,王朝君,劉海燕. Kerberos認證技術研究及分析[J].計算機與現代化,2001(5):35-39,43.
[5] OPPLIGER R. Microsoft .NET Passport: a Security Analysis[J]. IEEE Computer, 2003:36.
[6]王揚,俞烽.信息系統行為審計管理[J].指揮信息系統與技術,2012,3(2):44-48.