洪 鉑,朱韋橋
(中國鐵道科學研究院 電子計算機研究所,北京 100081)
針對鐵路企業點多、線長、面廣的行業特征,統一規劃建設的鐵路企業社會保障管理信息系統(簡稱:鐵路社保系統),主要涵蓋鐵路企業社會保險(五險)、企業年金、補充醫療保險等方面業務,在解決企業社會保障日常業務管理存在政策差異大、內容瑣碎、量大、復雜等問題的同時,幫助鐵路企業實現職工社會保障“記錄一生、保障一生、服務一生”的服務宗旨[1-2]。
鐵路社保系統具有政策性很強、需求變化頻繁等特點,在系統的建設過程中社會保險、企業年金和補充醫療保險的業務劃分較為獨立。集中式的架構不僅難以滿足這種相對獨立的開發模式,更在可擴展性、可維護性、靈活性、維護成本等方面很難滿足業務快速變化的需要。
在實踐中,我們采用了分布式架構,它是一套構建系統的準則,可以把一個復雜的系統劃分為一套簡單系統的計劃,各系統之間應該保持相互獨立,并與整個系統架構保持一致,采用分布式架構搭建的系統具有更加經濟、更易擴展、數據共享性更好等特點。
使用分布式架構建設的鐵路社保系統在軟件上解決了各項應用和獨立系統之間的在架構上的融合問題,也提高了系統在集群部署環境下的適應性。同時在技術復雜度不斷提高的情況下,隨之而來的信息安全風險也日益凸顯[3],身份認證作為系統的第一道安全防線,研究與實現符合鐵路社保系統需求的統一身份認證平臺就顯得尤為重要。
1.1.1 單點登錄技術
鐵路社保系統使用基于票據的方式來實現單點登錄。通過票據認證服務器功能的擴展,令票據認證服務器不僅可以為用戶生成認證票據完成授權應用服務器的訪問[4],也可以提供訪問控制、集中審計等功能,來滿足鐵路社保系統的個性化需求。
1.1.2 Session共享技術
鐵路社保系統采用分布式服務集群進行部署,引入Session共享服務器方式解決集群中Session不可跨服務器而存在的問題。Session共享服務器是在集群中設置服務器來統一存放和提供所有系統的Session[5-6]。這是實現Session共享最為復雜的方式,但只要配置得當,其性能、可靠性、擴展性和適應性也是最高的。
1.1.3 Redis內存數據庫技術
鐵路統一身份認證平臺采取Redis集群作為票據存儲和Session共享服務器,主要是出于2個方面的考慮:
(1)內存數據庫的I/O操作的高效,使用集群部署后其安全性和穩定性提升[7];
(2)Redis內存數據庫能夠提供較為豐富的數據結構,為系統擴展提供了更多的可能[8]。
鐵路社保系統的統一身份認證有兩方面的特點:
(1)需支持單位信息、身份證、工號、用戶名等組合認證方式;
(2)滿足多個自主建設應用和各類商業軟件的集成需求。因此鐵路社保系統的身份認證平臺將票據方式的單點登錄和Session共享服務器結合,即將Session共享服務器的功能擴展,使其支持票據管理。
平臺設計的核心:將內存數據庫作為登錄信息、Session信息和票據信息的存儲介質,規避登錄信息的跨域傳遞、減少與客戶端的交互,達到全面提高系統的安全性的目的。
鐵路社保系統統一身份認證平臺面臨3個方面的挑戰:票據生命周期管理、Session共享服務策略和Session的銷毀機制設計。
鐵路社保系統統一身份認證平臺的功能,主要體現在5個“集中”上,如圖1所示。

圖1 社保系統統一身份認證功能設計
集中用戶管理:鐵路企業職工既是鐵路社保系統的業務主體,也是鐵路社保系統的用戶主體,集中用戶管理應滿足業務辦理和集中授權管理的需要。
集中票據管理:票據生成規則的靈活配置,可以集成第三方證書或密鑰,對票據的生命周期進行管理。
集中認證管理:在訪問策略的規范下實現統一認證,防止不安全的鏈接入侵。
集中授權管理:這是社保系統集中菜單展示的必要手段,也支持應用或子系統獨立授權。
集中審計管理:記錄、查詢、分析各類審計信息,包括用戶登錄、系統操作等。
Session管理:對用戶登錄信息進行記錄,提供Session有效期管理和同步服務。
如圖2所示,統一身份認證的實現過程為:
(1)統一入口進行單點登錄,通過身份認證中心驗證后,將用戶登錄信息存儲至Session信息中心。

圖2 鐵路社保系統統一身份認證實現過程
(2)訪問應用和子系統時,生成票據信息存入Session共享服務器,憑證傳遞給應用或子系統。應用或子系統從Session共享服務器中取得票據信息和登錄信息,依據登錄信息生成應用或系統的Session。
(3)登錄信息可跨集群中進行共享,應用或系統的Session信息存儲在Session共享服務器中,滿足應用或系統自身集群的同步需要。
登錄完成,第1次訪問應用或子系統時,如圖3所示,單點登錄服務生成合法生成票據,將票據存入Session共享服務器,憑證傳送給應用或子系統。應用或子系統依據憑證從Session共享服務器中取得票據信息和登錄信息,生成自身Session。

圖3 第1次訪問應用時票據使用的順序圖
第2次訪問應用或子系統時需使用新的票據和憑證,如圖4所示,驗證登錄信息。如登錄信息已失效,應用或子系統同時失效;如登錄信息未失效,更新登錄信息失效時間,將登錄信息返回給應用或子系統。應用或子系統在取得登錄信息后,如果自身Session未失效,則更新自身Session的失效時間;否則,使用登錄信息再次獲取應用或子系統的Session。
鐵路社保系統中自主開發的應用使用統一身份認證平臺的Session共享服務,實現方式,如圖5所示。
(1)單點登錄成功后,生成一個主Session ID和各應用的Session ID,在應用生成自身Session后,主Session ID和應用的Session ID形成聯合主鍵(簡稱:Session共享主鍵)用于存儲應用的Session。

圖4 第2次訪問應用時票據使用的順序圖

圖5 Session共享服務實現流程圖
(2)票據信息中含Session共享主鍵,如果主Session ID無法檢索到對應的信息則登錄失效;如果主Session ID和Session共享主鍵在Session共享服務器中均有效,同時更新主Session和本應用Session的失效時間;如果Session共享主鍵未被檢索到,但是主Session ID可以檢索到信息,則通過登錄信息為應用再次創建Session;。在Session變化時,應及時推送到應用集群中。
(3)票據信息中不包含Session共享主鍵意味著應用非法或認證失效,需進行應用注冊或重新認證。
Session的銷毀機制包括3個方面:
(1)有效時間控制:使用Session共享服務器提供的Session有效時間管理實現統一控制。
(2)退出登錄:任一系統操作退出登錄,即刪除Session共享服務器中用戶所有信息。
(3)關閉瀏覽器:將上述2.3中所描述的主Session ID存入客戶端Cookie。瀏覽器關閉時,依據朱Session ID清除信息,如圖6所示。

圖6 Session銷毀機制實現的順序圖
該平臺已經在鐵路社保系統中成功應用,覆蓋了所有子系統及功能模塊,實現了數十萬用戶、百余個角色的統一身份認證,保證了用戶在系統中進行身份一致的有限訪問。統一身份認證平臺確保社保系統安全認證策略的統一,為用戶行為分析打下基礎,初步實現了資源的集約復用和服務的靈活交付,其關鍵技術都得到了驗證。
例如,在社保系統中,企業年金管理子系統不僅要對年金理事會的日常業務進行管理,也需要對年金基金市場化運作數據進行分析,實現年金基金的有效監督。因此企業年金管理子系統由自主開發的理事會管理業務模塊和第三方專業分析系統組成,且需要與多方外部機構業務系統(賬管人、托管人和投資管理人等)進行頻繁交互。統一身份認證平臺的成功應用,不僅平滑連通了各系統和模塊,也為數據交互提供了訪問控制策略,使數據的傳輸過程更加安全。
通過統一身份認平臺的建設,改善了鐵路社保系統的用戶體驗,使系統的結構和功能更加合理。統一身份認平臺作為系統網絡安全的重要組成部分,還需要在結合業務系統發展需求的基礎上,進一步與商業級的PKI/CA和云計算技術進行結合,使系統更加安全可靠。
[1]中國鐵道科學研究院. 中國鐵路總公司人力資源管理信息系統社會保障管理應用總體方案[R]. 北京:中國鐵道科學研究院,2015,12.
[2]中國鐵路總公司.鐵路信息化總體規劃[R]. 北京:中國鐵路總公司,2017.
[3]史天運.鐵路行業信息安全管理面臨的挑戰及對策探討[J].鐵路計算機應用,2015,24 (2):1-4.
[4]淡 艷,尹 謙.單點登錄系統模型分析 [J].成都大學學報:自然科學版,2008(27):123-126.
[5]趙艷芳,蔣云起.Web服務器負載均衡會話保持的研究 [J].云南民族大學學報:自然科學版,2011,20(4):296-300.
[6]任國慶.基于內容分類和會話共享的集群負載均衡研究 [D].長沙:湖南大學,2010.
[7]梅巧玲,王明哲,張志強,等.內存數據庫在互聯網余票查詢中的應用[J].鐵路計算機應用,2014,23 (3): 41-44.
[8]Josiah L. Carlson. Redis實戰[M].北京:人民郵電出版社,2015.