李勝蘭 上海鐵路局金華車務段
基于單點登錄的鐵路WEB系統設計與分析
李勝蘭 上海鐵路局金華車務段
隨著鐵路內部網上的web系統日益增多,為避免多次身份認證,提出實現單點登錄的幾種解決方案。從安全性角度論證賬戶映射法為最佳方案,并舉例說明實現單點登錄的處理流程設計。
單點登錄;賬戶映射;加密解密服務;Web service
隨著企業信息化工作不斷推進,鐵路內網中基于網頁的信息管理系統越來越多。各信息系統都有自己獨立的用戶認證和權限維護模塊,登錄頁面需要重復開發,運行時浪費系統資源,賬戶管理維護也越來越繁瑣。此外,用戶也日漸形成“密碼疲勞癥”,要分別記住這么多系統的賬號和密碼,切換到另一個系統還得重新進行身份認證。
信息化發展到一定程度,系統集成化是必然趨勢。所以,從長遠角度考慮,新開發的信息系統在架構設計上應考慮系統的集成特性。在系統集成的初級階段,先實現賬號和入口集成的單點登錄是最佳選擇。
單點登錄(SSO,Single Sign on)是一種方便用戶訪問網絡的技術。用戶只需要在網絡中主動地進行一次身份認證,就可以無縫訪問其被授權使用的所有系統。
要實現單點登錄,一般有三種解決方案:
(1)集成設計法。將內網所有WEB系統揉捏成一個獨立的大系統進行設計,整個系統只有一個登錄模塊和帳戶管理模塊,每個子系統都只是大系統中的一個功能模塊。
(2)帳戶映射法。選擇一個用戶功能較大較全的WEB系統作為門戶系統,并在里面添加到其他WEB系統的鏈接。同時,在其他WEB系統中建立相應賬戶映射,通過比對獲取的用戶信息來判斷是否允許訪問。
(3)安全網關法。它以統一身份認證平臺為支撐,將企業的所有應用系統部署在安全網關后面,通過適當的配置和安全網關,實現強身份認證和單點登錄功能。此方案將所有的用戶認證授權都交給第三方來代理,所有應用系統的訪問控制策略也由第三方來控制。
集成設計法對小企業的信息化改造比較適合,但像鐵路這種有一定信息化程度的大企業,現有的多套系統已趨于成熟,重新再進行集成設計開發絕對不現實;
賬戶映射法不需要推倒重來,對已有系統的改造量也很小,實現起來更簡單:首先,在門戶系統添加缺少的其他系統需要的用戶賬戶;然后,在其他應用系統中增加一張門戶系統賬號到各自WEB系統賬號的映射表。
安全網關法適合對用戶授權高度集中的信息系統的集成,安全性最高。但鐵路內部很多信息系統的用戶信息數據都是分級建庫的,要建立一個高度集中的第三方身份認證、訪問控制機制,不太可行。而且,對于基于車務段或小公司一級的組織結構來說,部署起來有些大材小用。另外,安全網關法實現起來技術水平要求高,存在對已有系統的改造工作量和兼容問題,還有對新系統的標準規范要求和接口問題。
綜上所述,第二種方案即賬戶映射方法更加適合作為鐵路內部WEB系統實現單點登錄的解決方案。以車務段為例,我們將OA系統作為門戶網站,在首頁添加其他WEB系統的鏈接,并在這些WEB系統中做賬戶映射,將OA系統的用戶解釋成WEB系統的用戶。這樣,用戶只要能成功登錄辦公網系統,并被這些WEB系統授權,就可以直接進入這些WEB系統,無需再次進行登錄。
賬戶映射法實現起來不難,關鍵在于如何在各個WEB系統之間正確獲取用戶信息來進行認證。以下探討了獲取用戶信息的幾種方法。
當用戶轉入另一個WEB系統時,WEB系統通過傳過來的鏈接參數來獲取用戶信息。例如http://127.0.0.1/webpages/index.aspx?user=name1,其中name1就是用戶名。查找用戶映射表,如果name1對映的用戶名name2被授權就可訪問相應的頁面,而無需再次到登錄頁面進行登錄,一切由系統自動判斷。
但是,直接在鏈接中傳遞用戶名存在很大的安全問題。未授權用戶很容易偽造鏈接來非法登錄WEB系統。因此,必須要對用戶信息進行加密傳遞。有以下三種方案:
方案一,在門戶系統中加密然后傳遞給其他應用系統,如果門戶系統與要轉入的應用系統的加解密算法不兼容,則會存在一個不能解密的問題。這樣,用戶信息就不能還原,應用系統就不能識別用戶,授權肯定失敗。
方案二,加密和解密都在一臺服務器上進行。在這臺服務器上分別提供加密和解密的Web Services,分別供門戶系統用來加密用戶信息和要進入的WEB系統解密傳遞來的用戶信息。這樣,就可以相對安全的傳遞用戶信息了。但是,防君子不防小人,一旦知道了密鑰和加解密算法也很容易破解。所以,我們打算采用非對稱的RSA算法,只在客戶端留下加密用的公匙,這樣理論上密文即使被截獲了也不可能破解出來的。MD5不行,它是不可逆的。
方案三,將要傳遞的用戶信息生成摘要,再與要登錄系統的所有用戶信息摘要(必須是同一方法)直接比對。相對來說,方案三的工作量要大很多,因此不予采納。
用戶訪問一個網站時往往需要瀏覽許多網頁,建立許多連接,用戶和服務器的通信是通過HTTP完成的,由于HTTP無狀態記憶的特點,此次連接無法得到上次連接的狀態。因此,上次連接的合法化并不能保證下次連接也合法。
Session就是一個可以用來保存整個會話(包括從打開瀏覽器連接到服務器的某個頁面,到關閉瀏覽器整個過程)的對象。因此,可以將各個連接要用到的全局變量存儲在Session中,如用戶信息。而Session ID則是由服務器分配用來標識Session的。每個Session ID對應一個Session對象。這樣,只要用戶不注銷,任何頁面都可以通過Session ID獲知當前用戶身份。
這對于所有WEB系統都在同一臺應用服務器上是可行的,但對于分布式的WEB系統以及分布在不同服務器上的各個WEB系統來說,就無法通過Session ID來傳遞用戶信息。因為,每個Session ID只對應自己服務器上的Session對象,而Session對象里的用戶信息是存儲在分配ID的服務器內存中的。也就是說,通過程序傳遞過來的Session ID不可能在另一臺服務器內存中找到相應的用戶信息。我們的門戶WEB系統與其它WEB系統一般都分布在不同的服務器上,無法獲取用戶信息,也就無法對其進行身份認證。因此,不能僅僅傳遞Session ID,而必須傳遞Session中的用戶信息。
既然需要保存的是Session中的用戶信息,那不如直接用Cookie來保存,也省去創建Session對象的開銷。
實現起來可以分兩步:首先,在用戶成功登陸門戶系統A時,在用戶本地建立Cookie,保存用戶身份信息;然后,在用戶點擊另一個WEB系統B的鏈接時,B系統把保存在用戶機器上的Cookie提取出來進行驗證,如果Cookie有效則將用戶定向到要訪問的頁面上,無效則拒絕用戶訪問請求資源并要求用戶重新登錄。
Cookie是在HTTP協議下服務器或腳本維護客戶機上信息的一種方式,Cookie以文件形式保存在客戶機的硬盤上,從安全性分析,極易被被篡改,而且里面保存的用戶隱私也容易被泄露。那么如何保證Cookie的安全性和有效性呢?有兩種方法,一是對Cookie進行加密保存,這樣也就需要配套的解密過程;還有一個就是采用SSL等技術加密Cookie的傳輸通道,并在用戶退出時刪除他本機上的Cookie。
經過以上分析與研究,我們選定賬戶映射法來實現單點登錄,并用RSA算法加密后的用戶信息作為鏈接參數在系統間進行傳遞。以車務段內網WEB信息系統改造為例作具體說明。
由于車務段的OA系統還集成了值班表系統、站長日志、財務預算、設備報修等其他系統,用戶量最多,功能最強大,使用率最高,因此,將其作為單點登錄系統的門戶系統,即將它的用戶登錄頁面作為唯一的登錄入口。然后,在OA系統的首頁加入了公文流轉系統、信息共享系統、職工崗位動態系統、節能節支預警系統的WEB鏈接,并對這些WEB系統進行用戶映射改造,最后在應用服務器上部署加解密服務的Web services。圖1以節能節支預警系統無縫接入OA系統為例,來演示實現單點登錄WEB系統的處理流程。

最大化方便用戶使用是信息系統設計的宗旨。信息化領域擴大的同時,系統集成也逐漸提上日程,單點登錄既為用戶提供了便捷,也為信息系統集成打下了基礎。和國內外流行的單點登錄解決方案相比,賬戶映射法有些過時,但對原有系統改造量最小,實現最容易,仍可作為鐵路內網WEB系統實現單點登錄的首選。但是,若從電子商務與內網信息集成發展的安全性考慮,構建第三方統一認證授權平臺,仍需作為日后新系統架構形式進行部署。
[1]李凡,王流一.《一種基于票據的單點登錄協議設計與實現》.計算機工程與科學.2012年第2期.
[2]張旋.《一種基于證書的單點登錄方案設計》.信息技術.2012年第8期.
責任編輯:王華 王輝
來稿日期:2012-10-31