摘要:分析了傳統(tǒng)SSO產品的原理和不足,提出對應用系統(tǒng)登錄過程所需的兩類信息進行分離解耦,在利用XML和USB身份認證方式的基礎上,實現應用系統(tǒng)的登錄過程共享與自動登錄#65377;研究了Windows和Web應用的窗體構造與消息傳遞機制,開發(fā)出支持多模式的分布式SSO系統(tǒng),實際應用效果良好#65377;
關鍵詞:單點登錄;自動登錄;分布式;多模式應用;可擴展標記語言
中圖分類號:TP317.1文獻標志碼:A
文章編號:1001-3695(2007)04-0276-03
目前的企業(yè)應用環(huán)境中,往往有很多應用系統(tǒng),如辦公自動化(OA)系統(tǒng)#65380;財務管理系統(tǒng)#65380;檔案管理系統(tǒng)#65380;信息查詢系統(tǒng)等#65377;用戶在使用這些應用系統(tǒng)時并不方便#65377;用戶每次使用系統(tǒng)都必須輸入用戶名和密碼,進行身份驗證;而且,應用系統(tǒng)不同,用戶名就不同,用戶必須同時牢記多套用戶名和密碼#65377;特別是對于應用系統(tǒng)數目較多,用戶數目也很多的企業(yè),這個問題尤為突出#65377;對于企業(yè)級用戶來說,迫切需要一種便捷#65380;安全的系統(tǒng)訪問工具來簡化應用系統(tǒng)的登錄過程#65377;
SSO(Single SignOn,單點登錄)技術將幫助企業(yè)安全地管理和控制企業(yè)信息系統(tǒng)中最重要的資產——身份認證#65377;其機制是“一次登錄訪問多系統(tǒng)”,用戶訪問多系統(tǒng)時僅需作一次身份認證,就可以對所有的應用系統(tǒng)進行訪問,而無須多次輸入認證信息#65377;SSO登錄方式,減少了在不同系統(tǒng)中登錄所耗費的時間;減少了系統(tǒng)管理員管理用戶權限的時間;增加了管理的便利性與系統(tǒng)的安全性#65377;
1傳統(tǒng)SSO產品的機制與不足
SSO的根本含義是實現合法用戶一次登錄均可以訪問多個應用系統(tǒng)#65377;但不同的SSO系統(tǒng)的原理與實現方式各有不同#65377;
傳統(tǒng)SSO實現方案的原理是身份認證標志(SSO Token)在多個應用系統(tǒng)之間的傳遞或共享[1,2]#65377;用戶通過登錄點登錄SSO系統(tǒng)時,SSO系統(tǒng)根據用戶的憑證(如用戶名和密碼)生成一個身份認證標志#65377;當用戶訪問應用系統(tǒng)時,只要出示該標志;如果其合法,則不需要用戶再進行身份認證#65377;
目前業(yè)界已有很多產品支持SSO,如IBM的WebSphere和BEA的WebLogic,但各家SSO產品的實現方式也不盡相同#65377;WebSphere通過Cookie記錄認證信息,WebLogic則是通過Session共享認證信息[3]#65377;Cookie是一種客戶端機制,它存儲的內容主要包括名字#65380;值#65380;過期時間#65380;路徑和域#65377;路徑與域合在一起就構成了Cookie的作用范圍#65377;用Cookie方式可實現SSO,但域名必須相同#65377;Session是一種服務器端機制,當客戶端訪問服務器時,服務器為客戶端創(chuàng)建一個唯一的SessionID,以使在整個交互過程中始終保持狀態(tài),而交互的信息則可由應用自行指定,因此用Session方式實現SSO,不能在多個瀏覽器之間實現單點登錄,但卻可以跨域#65377;這些SSO產品有比較大的局限性#65377;要實現SSO Token在不同應用系統(tǒng)之間的傳遞與共享,需要在每個應用系統(tǒng)處安裝代理(SSO Agent),這就使得SSO系統(tǒng)與各應用系統(tǒng)之間存在相互依賴關系#65377;那些不受企業(yè)所控制的應用系統(tǒng)均不能納入到SSO的范圍內#65377;另外,它們的設計主要是針對Web應用系統(tǒng)而言的,不支持多種模式的應用系統(tǒng)或支持程度不夠好#65377;
2系統(tǒng)設計
2.1系統(tǒng)的設計思想
總的設計思想是支持多模式應用系統(tǒng)#65380;應用范圍廣泛#65380;登錄過程共享#65377;
與傳統(tǒng)的SSO有所差別,本SSO系統(tǒng)采用自動化登錄技術,就是屏蔽用戶登錄目標系統(tǒng)的過程#65377;原來用戶在使用目標系統(tǒng)時,需要輸入用戶名和口令(或其他認證方式),自動化技術能夠通過一些腳本自動為用戶輸入口令和用戶名,而整個登錄過程對用戶透明[4]#65377;去除了SSO Token,使得SSO系統(tǒng)所調用的各應用系統(tǒng)不依賴于SSO系統(tǒng)#65377;用戶使用SSO系統(tǒng)時,也是通過單一的登錄點進行一次身份認證#65377;但在調用應用系統(tǒng)時,SSO是通過自動輸入用戶憑證值并觸發(fā)應用系統(tǒng)的登錄事件來實現自動登錄過程,其間不傳遞SSO Token,所以SSO與應用系統(tǒng)之間是單向的松耦合關系#65377;
通過這個改變,使得支持多模式應用系統(tǒng)的單點登錄成為可能,并突破了企業(yè)范圍的限制,把不受企業(yè)控制而獨立存在的應用系統(tǒng)也納入到了可單點登錄的范圍內,達到了擴展系統(tǒng)應用范圍的目標#65377;
登錄過程的共享,則是通過將應用系統(tǒng)的登錄過程記錄到獨立的XML配置文件,并采用網格資源共享平臺來實現#65377;
目前設計支持Windows#65380;Web兩種模式的應用系統(tǒng),而Windows應用系統(tǒng)的登錄過程是通過發(fā)送Windows消息來完成的,要求SSO系統(tǒng)自身也必須是一個Windows應用系統(tǒng)#65377;
2.2系統(tǒng)的開發(fā)運行環(huán)境
為滿足系統(tǒng)操作界面友好#65380;實用#65380;方便#65380;快捷,采用Boland公司的Delphi 7作為系統(tǒng)開發(fā)環(huán)境,MS SQL Server 2000作為數據庫搭建Client/Server架構#65377;服務器必須是Windows 2000/NT/XP,客戶機可以是Windows 2000/NT/XP/98#65377;
2.3SSO系統(tǒng)的總體架構
系統(tǒng)采取分布式架構,多臺異地分布的服務器之間通過分布通信技術實時通信,共享各應用系統(tǒng)登錄過程的XML配置文件#65377;其SSO系統(tǒng)的網絡架構如圖1所示#65377;
系統(tǒng)的用戶分為兩大類,即管理員和普通用戶[5]#65377;運行程序分為三個,即服務器端程序#65380;管理員客戶端程序和普通用戶客戶端程序#65377;管理員運行管理員客戶端程序,負責將Windows#65380;Web應用系統(tǒng)添加到服務器,創(chuàng)建應用系統(tǒng)登錄過程的XML配置文件,并負責管理用戶的權限;普通用戶運行普通用戶客戶端程序,從服務器下載應用系統(tǒng)的XML配置文件#65377;普通用戶配置好應用系統(tǒng)的各項登錄憑證值后,可以在以后使用中省去輸入用戶名#65380;密碼的步驟,直接單擊應用系統(tǒng)實現自動登錄#65377;其程序架構與主體流程如圖2所示#65377;
2.4SSO系統(tǒng)的存儲設計
在存儲設計上,充分考慮了信息共享與信息安全#65377;登錄過程記錄到XML配置文件中,對所有的用戶來說都是相同的,而且也不是機密性信息,可以在不同機子上共享#65377;而憑證值信息是機密性信息,每個人都需要保存到只屬于自己的安全地方#65377;這里采用USB Key來存儲用戶的憑證值信息#65377;USB Key是一種基于帶安全操作系統(tǒng)的智能卡技術的硬件加密設備,它集智能卡和讀寫器于一體,并采用當前流行的USB接口技術連接到計算機,可以在不同計算機之間方便地熱插拔使用,并且具有很高的安全性#65377;
通過把登錄信息區(qū)分為公用信息與私人信息,將兩者解耦,實現了高度的信息共享#65377;一個應用系統(tǒng)配置好XML后可以在所有的計算機上使用#65377;用戶配置完一個應用系統(tǒng)后,憑證值被存到USB Key中,可以在不同的計算機之間使用#65377;
鑒于應用系統(tǒng)的配置信息可以共享,系統(tǒng)支持多臺異地分布的服務器,它們之間通過MS SQL Server 2000的復制功能實現數據的同步與一致[6]#65377;應用系統(tǒng)的配置被添加到一臺服務器后會馬上被同步發(fā)送到其他服務器#65377;要利用這個功能,需要將XML配置文件保存在MS SQL Server 2000數據庫中#65377;
3關鍵技術
系統(tǒng)的難點和關鍵技術在于應用系統(tǒng)登錄過程的配置與調用,以及異地服務器之間共享登錄過程的XML配置文件#65377;3.1Windows應用系統(tǒng)登錄的配置與調用
在操作系統(tǒng)的底層Windows應用系統(tǒng)是采用Windows窗體與消息來實現的#65377;Windows應用系統(tǒng)的界面由多個窗體組成,表格#65380;輸入框#65380;按鈕等都是窗體#65377;在Windows應用系統(tǒng)運行后,操作系統(tǒng)會給這些窗體分配一個唯一的句柄(Handle),通過給窗體對應的句柄發(fā)送消息可以控制窗體的行為#65377;消息的發(fā)送方法是調用Win32API SendMessage或PostMessage函數#65377;這兩個函數都有四個參數,第一個參數指定目標窗體的句柄;第二個參數指定消息類別,如SendMessage(S│000B0700,WM_CHAR,S│00000061,S│00030001)表示給句柄為000B0700的窗體發(fā)送按下字符a的消息#65377;其中,第三個參數S│00000061是字符a的ASCII碼值#65377;
系統(tǒng)的做法是解析Windows應用系統(tǒng)的窗體結構,記錄需要向其發(fā)送消息的窗體的位置,并選擇相應的消息類型,將登錄過程記錄成Windows消息隊列,實現登錄過程的串聯操作#65377;
由于要實現登錄過程的共享,不能針對某一個人某一次登錄而言,而是提取登錄過程共性的信息,包括向哪些窗體發(fā)送信息#65380;窗體的位置#65380;消息的類別#65380;消息發(fā)送的次序#65377;關鍵在于前兩類信息的獲取,需要給管理員提供一個類似Microsoft Spy++的進程窗體解析工具,將Windows應用系統(tǒng)所包含的窗體以及窗體的位置分析出來#65377;
一旦登錄過程共性的信息即需要將提交的憑證確定之后,普通用戶只要配置好自己的憑證值如用戶名#65380;密碼等,系統(tǒng)即可組合這些信息實現具體用戶的自動登錄過程#65377;
3.2Web應用系統(tǒng)登錄的配置與調用
Web應用系統(tǒng)分為瀏覽器端和服務器端#65377;瀏覽器端提交到服務器端的方式主要有兩種:①get是通過將數據添加到URL后提交的方式;②post則是利用郵寄信息數據字段將數據傳送到服務器#65377;服務器端接收消息的方式也有多種,Request.QueryString()接收get方式傳輸的數據,Request.Form()接收post方式傳輸的數據,Request()接收get#65380;post兩種方式傳輸的數據#65377;
系統(tǒng)管理員將登錄頁提交的地址#65380;所需參數的名稱以及提交數據的方式記錄到XML配置文件中,普通用戶根據XML配置文件配置自己的憑證值#65377;
Web應用系統(tǒng)的自動登錄過程就是自動提交各項憑證數據的過程,由于服務器端接收數據的方式不可知,存在不確定性,采用提交數據的方案也應不同#65377;對于get方式提交數據的方式,采用組合各憑證值作為參數序列添加到URL后,輸入到瀏覽器地址進行提交;對于post方式提交數據的方式,普通用戶客戶端根據XML配置文件創(chuàng)建一張包含form的HTML頁面并調用瀏覽器提交該form的信息#65377;該HTML頁有一個form#65377;form的提交地址是配置文件記錄的提交地址,提交方式是post,它包含配置文件中記錄的各參數,參數值則是用戶配置的憑證值#65377;
3.3XML配置文件異地共享
MS SQL Server 2000支持存放文本與二進制文件#65377;通過將XML配置文件存放到數據庫中,利用MS SQL Server 2000的復制功能來實現分布式共享XML配置文件#65377;MS SQL Server 2000復制是一組解決方案,支持跨異類平臺和數據庫共享信息,然后可以修改和協調該信息#65377;復制確保根據需要隨時隨地均可以得到正確的數據#65377;使用發(fā)布工業(yè)術語來表示復制拓撲中的組件和進程#65377;該模型由下列對象組成:發(fā)布服務器#65380;分發(fā)服務器#65380;訂閱服務器#65380;發(fā)布#65380;項目和訂閱#65377;
發(fā)布服務器提供數據以便復制到其他服務器的服務器;分發(fā)服務器作為分發(fā)數據庫宿主并存儲歷史數據和/或事務以及元數據的服務器;訂閱服務器是接收復制數據的服務器,根據復制的類型和所選擇的復制選項,訂閱服務器還可以將數據更改傳播回發(fā)布服務器或將數據重新發(fā)布到其他訂閱服務器#65377;多臺異地分布的服務器(圖3)通過復制策略保持數據同步一致,對任意一臺服務器上XML文件的修改可以立刻反映到其他服務器上#65377;
4應用實例
4.1Windows應用
一個通信錄的登錄窗口包含了用戶名#65380;密碼輸入框以及確定按鈕#65377;通過Windows應用的憑證配置工具解析它的窗體結構,找出各窗體在應用系統(tǒng)中所處的位置#65377;
生成的XML配置文件如下,每個憑證(Credence)對應一個窗體#65377;其中hwndOrder指定了該窗體在應用系統(tǒng)中的位置,messageType指定了消息類別,type則區(qū)別是系統(tǒng)自動賦值還是由用戶來配置憑證值#65377;
普通用戶先從服務器下載XML配置文件,對用戶名#65380;密碼進行設置,設置完畢后可以實現自動運行該通信錄#65377;系統(tǒng)普通用戶客戶端自動登錄通信錄的實現過程如下:
(1)讀取XML配置文件;
(2)啟動通信錄程序;
(3)根據憑證列表順序,先為用戶名對應的窗體發(fā)送輸入用戶名消息,窗體句柄通過窗體位置得到,用戶名的值是普通用戶設置的值;
(4)為密碼對應的窗體發(fā)送輸入密碼消息;
(5)最后為確定按鈕對應的窗體發(fā)送點擊鼠標的消息#65377;
4.2Web應用
某單位的考勤系統(tǒng),包含了用戶名#65380;密碼#65377;本系統(tǒng)為它的登錄過程XML配置文件如下:
根據該XML配置文件及用戶的配置值,采用get方式提交數據,組合生成的登錄訪問字符串是http://192.168.1.3:8080/interlab/login.asp?usrname=陳東passwd=123456,調用瀏覽器并在地址欄中自動輸入該字符串即可自動登錄#65377;
5結束語
對應用系統(tǒng)登錄過程的信息進行了分離解耦,達到了共享登錄過程的目的,實現了Windows#65380;Web兩種模式應用系統(tǒng)的自動登錄#65377;本系統(tǒng)應用面覆蓋當今幾乎所有Windows和Web應用,突破企業(yè)范圍的限制,方便企事業(yè)單位工作人員使用多個應用系統(tǒng),提高了辦事效率,具有很高的實用價值#65377;進一步的研究開發(fā)是擴展SSO產品支持的應用系統(tǒng)模式,研究Java應用系統(tǒng)以及Linux#65380;UNIX環(huán)境下應用系統(tǒng)的自動登錄#65377;
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。