閔曉霜,董巖,王皓,劉紅,劉雪飛,楊躍,李奉原
(中國電子信息產(chǎn)業(yè)集團有限公司第六研究所,北京 100083)
隨著信息化水平的提高,企業(yè)信息化程度逐步深入,為了保障管理與業(yè)務的高效運作,可能會進行組織架構(gòu)調(diào)整、崗位人員優(yōu)化、業(yè)務服務升級等,也陸續(xù)會有新的信息化系統(tǒng)上線。例如,目前在中國航油智慧加油系統(tǒng)建立了覆蓋總部與各地區(qū)干線機場的統(tǒng)一多集群架構(gòu),總部中心集群部署了基礎(chǔ)數(shù)據(jù)管理、業(yè)務數(shù)據(jù)匯集、中心數(shù)據(jù)分發(fā)、綜合態(tài)勢分析等應用系統(tǒng),各地干線機場業(yè)務集群部署了基礎(chǔ)信息管理、任務調(diào)度、綜合監(jiān)控、地圖保障、加油作業(yè)等應用系統(tǒng),隨著加油前端與總部建立信息通道,加油調(diào)度及終端作業(yè)實現(xiàn)電子化,系統(tǒng)將進一步融合大數(shù)據(jù)、云計算、GIS、AI 等,優(yōu)化內(nèi)部管理和擴展外部服務,構(gòu)建新的應用系統(tǒng),為各類用戶提供相對應的信息化服務。
由于眾多系統(tǒng)相互獨立,且開發(fā)時間、開發(fā)商、技術(shù)架構(gòu)等存在差異,這對信息管理人員以及用戶都造成了身份信息管理的挑戰(zhàn)。對于信息管理人員,要依靠低效的手動操作來支撐員工在各個應用系統(tǒng)中的密碼重置、身份注冊/注銷等繁重卻非常重要的身份管理工作;對于使用人員,則要記住多個應用系統(tǒng)的賬號密碼,分別登錄各應用系統(tǒng),這為用戶日常工作造成了諸多不便。尤其是隨著應用系統(tǒng)逐漸增多,出錯的幾率以及受到非法截獲與破壞的可能性也會增大,安全性則會相應降低[1-2]。針對這種情況,統(tǒng)一身份認證、單點登錄等概念應運而生,并不斷地被應用到企業(yè)信息系統(tǒng)中[3-4]。
統(tǒng)一身份認證將各賬戶及認證方式進行統(tǒng)一與整合,面對多個應用系統(tǒng),用戶只認證一次,通過后就可以對任何有權(quán)限的其他應用系統(tǒng)進行訪問,這就實現(xiàn)了單點登錄[5]。用戶登錄到一個門戶界面,可以進入有權(quán)限的其他業(yè)務系統(tǒng),解決了企業(yè)員工日常頻繁登錄各系統(tǒng)的煩惱,避免了忘記密碼需要信息管理人員重置密碼的困擾。建立健全的身份管理體系也有助于對用戶訪問權(quán)限、應用權(quán)限進行統(tǒng)一集中管控,對企業(yè)資源進行有效整合,保障并促進產(chǎn)業(yè)鏈中各角色之間的正確互通及高效合作。
統(tǒng)一身份管理系統(tǒng)是對用戶進行身份確認且分配使用權(quán)限的核心系統(tǒng),實現(xiàn)對用戶使用平臺全生命周期管理,保障資源在權(quán)限范圍內(nèi)得到有效使用與管理[6]。針對未來種類繁多的應用系統(tǒng),系統(tǒng)應支持多元化集成,對不同應用開發(fā)語言、認證源及認證協(xié)議實現(xiàn)全方位集成,統(tǒng)一認證,用戶只需認證一次,平臺內(nèi)所有應用系統(tǒng)均可使用,無需進行重復認證。
4A(認證Authentication、授權(quán)Authorization、記賬Accounting、審計Audit)統(tǒng)一安全管理規(guī)范涵蓋統(tǒng)一的賬號管理、認證管理、授權(quán)管理和安全審計,可有效解決企業(yè)對眾多應用的統(tǒng)一訪問、控制、授權(quán)的需求?;谠撘?guī)范,并根據(jù)企業(yè)的現(xiàn)實需求,建立統(tǒng)一身份管理平臺,實現(xiàn)以下功能:統(tǒng)一賬號管理、統(tǒng)一身份認證、統(tǒng)一集中授權(quán)和透明操作審計,以及支持用戶“一次登錄,到處訪問”的單點登錄。
實現(xiàn)統(tǒng)一身份認證,最核心的數(shù)據(jù)就是用戶的身份信息,它是實現(xiàn)認證和訪問控制的基礎(chǔ)。系統(tǒng)應對平臺內(nèi)應用系統(tǒng)建立統(tǒng)一的用戶賬號體系,各應用系統(tǒng)再無須單獨保有、維護這些賬號信息。功能包含:用戶賬號的全生命周期管理、主從賬號映射及關(guān)聯(lián)管理功能。
統(tǒng)一身份認證就是通過標識和鑒別用戶身份,判斷用戶是否有權(quán)訪問目標應用及功能,防止攻擊者假冒合法用戶來獲取訪問權(quán)限[7]。統(tǒng)一身份認證服務作為平臺統(tǒng)一認證中心,為平臺應用資源提供多種認證接口,實現(xiàn)平臺用戶的統(tǒng)一身份認證。支持賬戶密碼登錄、基于短信驗證碼的二次認證;支持基于SAML、OAuth、OIDC、CAS 等標準認證協(xié)議。
身份認證成功后,系統(tǒng)通過集中授權(quán)賦予用戶進行應用、功能等的操作權(quán)限。系統(tǒng)提供對應用、功能及數(shù)據(jù)的訪問權(quán)限設(shè)置,支持對用戶的單獨授權(quán)和對用戶組的批量授權(quán),支持通過角色綁定的方式進行授權(quán)。
系統(tǒng)的每個使用者都該為自己的操作負責,每個操作都要留有記錄,以便核查。系統(tǒng)需記錄授權(quán)和非授權(quán)用戶在系統(tǒng)中的用戶行為,通過有效分析這些行為并直觀呈現(xiàn)給安全管理員,可對用戶審計提供有效依據(jù)。進一步地,通過一定量的數(shù)據(jù)積累,可形成一定規(guī)則,對行為異常的用戶賬號進行限制,并可在認證的時候?qū)崿F(xiàn)主動防御、瞬間互動。
單點登錄(Single Sign On,SSO)作為統(tǒng)一認證后續(xù)功能,不僅提供一次登錄平臺即可打開平臺內(nèi)所有業(yè)務系統(tǒng)、減少認證流程、避免重復操作帶來的安全隱患,還具有便捷辦公、簡化管理等諸多好處。系統(tǒng)應支持PC端應用資源,Pad、移動端單點登錄,以及API 接口單點登錄3 種方式。
系統(tǒng)總體架構(gòu)劃分為4 個層次:數(shù)據(jù)層、接口層、服務層和UI 層,如圖1 所示。數(shù)據(jù)層采用MySQL 關(guān)系數(shù)據(jù)庫存儲賬號、權(quán)限等持久化數(shù)據(jù),采用Redis 緩存日志等;接口層為系統(tǒng)內(nèi)外部提供面向數(shù)據(jù)的API 接口,對外部系統(tǒng)以API 的形式提供認證接口;服務層提供了統(tǒng)一賬戶、統(tǒng)一認證、集中授權(quán)以及操作審計的功能服務;UI 層提供用戶操作的人機交互界面,包括認證入口、后臺管理界面。
圖1 系統(tǒng)總體架構(gòu)
系統(tǒng)采用基于Restful/JSON 的前后端分離方式,無論是B/S 還是原生APP 應用類開發(fā),一律通過API 來調(diào)用后臺服務器服務。前端Web 界面架構(gòu)基于響應式,支持不同設(shè)備分辨率,底層使用Bootstrap 框架;使用JQuery框架編寫前面流程控制;采用流式布局,兼容各類操作系統(tǒng)及終端設(shè)備,還可兼容移動設(shè)備(如手機、iPad、PDA)。后端主要采用Spring Boot、Spring MVC、J2EE、Spring Security等一些成熟的開源技術(shù),實現(xiàn)微服務體驗,讓每一個功能都能獨立出來,便于擴展。
系統(tǒng)采用分布式部署,總部建立統(tǒng)一身份管理認證中心,同時各地區(qū)建設(shè)分認證中心各自進行用戶與權(quán)限管理,分散總部平臺認證壓力。系統(tǒng)數(shù)據(jù)庫采用兩臺MySQL 都可讀寫、互為主備的設(shè)計,兩臺主庫間做高可用,采用keepalived 解決方案,使用VIP(虛擬IP)對外提供服務,當主庫宕機時,備庫就會接管VIP 對外繼續(xù)提供服務,保證了數(shù)據(jù)的高可用。系統(tǒng)的數(shù)據(jù)交互如圖2 所示。
圖2 系統(tǒng)數(shù)據(jù)交互
2.2.1 統(tǒng)一賬號管理
(1)用戶賬號的全生命周期管理
系統(tǒng)對用戶賬號進行全生命周期管理,包括賬號的創(chuàng)建、修改、刪除以及對賬號狀態(tài)(停用、啟用)的維護。出于安全考慮,除平臺管理員或被授權(quán)用戶外,不支持用戶自行修改。用戶賬戶詳細信息包括:用戶ID、密碼、姓名、性別、年齡、身份證號碼(實名認證)、電話、崗位、所屬地區(qū)、子公司等。密碼進行加密存儲,忘記密碼則只能進行重置。
(2)賬號管理機制
系統(tǒng)創(chuàng)建用戶賬號時,即創(chuàng)建一個唯一的系統(tǒng)主賬號,該賬號在各接入應用系統(tǒng)中通用,經(jīng)授權(quán)的用戶能登錄并訪問被授權(quán)的應用系統(tǒng)。系統(tǒng)也提供主從賬號映射,用戶可以通過賬號關(guān)聯(lián)配置,將自己在某個應用系統(tǒng)中的子賬號映射到統(tǒng)一身份認證平臺的主賬號上,該方式適用于已有不可改造系統(tǒng)的接入。
(3)賬號的批量管理
用戶賬號可單獨管理,也可按照不同的組織方式進行集體管理??陀^上,用戶屬于某個組織機構(gòu),處于某種崗位;主觀上,管理員可對用戶進行自定義分組管理,以分組ID 標識不同的組。管理員可通過上述兩種方式對用戶進行批量管理,包括批量創(chuàng)建、修改、刪除賬號,批量停用、啟用賬戶,批量重置密碼以及批量授權(quán)等。
2.2.2 統(tǒng)一身份認證
系統(tǒng)為用戶提供在各業(yè)務應用過程中的一次認證功能,支持不同域下業(yè)務應用的統(tǒng)一認證集成。通過集中資源管理、授權(quán)管理提供的集中身份信息和權(quán)限信息,能夠消除用戶信息系統(tǒng)的業(yè)務孤島和數(shù)據(jù)孤島。
平臺用戶進行實名認證,用戶不具有自行注冊、創(chuàng)建用戶的功能。創(chuàng)建用戶均需要平臺管理員或者地區(qū)管理員在核實身份后創(chuàng)建,并綁定信任設(shè)備(如PC、手機等)。用戶提交身份信息與系統(tǒng)賬號進行綁定,使用戶IT身份信息與真實身份進行關(guān)聯(lián)。
(1)二次身份認證
用戶登錄的身份驗證支持基于動態(tài)短信的二次認證,流程如圖3 所示。
圖3 用戶身份驗證流程
(2)基于Token的認證
身份認證模式主要有2 種:Token 認證和Session 認證。傳統(tǒng)的Session 認證是在服務端存儲Session,并向客戶端返回帶有Session Id 的Cookie,客戶端每次請求帶上Cookie 到服務端校驗,該方式存在諸多弊端[8]:用戶并發(fā)訪問量大或應用規(guī)模大時會占用大量服務器內(nèi)存;難以橫向擴展(跨域、跨服務共享資源);Cookie 傳輸容易遭受CSRF(跨站點請求偽造)攻擊等。而基于Token 的認證方式是無狀態(tài)的,Token 只存儲于客戶端,客戶端每次向服務端發(fā)送請求時都會攜帶Token(由服務端簽發(fā)),服務端接收到Token 時會進行驗簽,從而對用戶身份以及Token 有效性進行驗證。
系統(tǒng)采用基于Token 的認證方式,用Token(JWT)來代替Session 進行分布式的人員狀態(tài)管理。用戶認證成功后,獲取用戶的權(quán)限信息,并生成包含用戶身份及權(quán)限等主要信息的Token。Token 認證機制如圖4 所示,Token 存儲在客戶端且包含主要用戶信息,服務端省去了存儲會話及查詢相關(guān)數(shù)據(jù)庫的工作,有利于服務性能提升及橫向擴展;由于不依賴Cookie 機制,方便支持跨域訪問,支持原生平臺(iOS、Android 等)客戶端。
圖4 Token 身份驗證機制
2.2.3 集中授權(quán)管理
(1)角色與權(quán)限管理
可對系統(tǒng)角色進行增刪改查等操作,內(nèi)容包括:角色代碼、角色名稱等。
角色權(quán)限分配:可以對每個用戶角色進行權(quán)限的分配,包括子系統(tǒng)的訪問權(quán)限、關(guān)鍵功能和操作的執(zhí)行權(quán)限、關(guān)鍵數(shù)據(jù)的訪問權(quán)限或訪問內(nèi)容范圍(如各分公司用戶只能查看本單位相關(guān)數(shù)據(jù));可通過對角色(崗位)配置權(quán)限,再通過角色賦權(quán)給某個組織機構(gòu)達到批量授權(quán)。
權(quán)限驗證:對于系統(tǒng)關(guān)鍵操作及操作的數(shù)據(jù)內(nèi)容,除在前端根據(jù)權(quán)限進行一定的限制和隱藏外,后臺應進行權(quán)限驗證,確保用戶操作類型和操作的數(shù)據(jù)在其權(quán)限范圍內(nèi),禁止非法或未授權(quán)的操作。
(2)權(quán)限管理策略
①分級管理
系統(tǒng)提供分級管理功能,使用戶可以更明確、便捷地管理各個業(yè)務系統(tǒng)。管理員分為平臺中心管理員、各地區(qū)管理員、平臺中心安全管理員。
管理員在本平臺可以進行下列工作:平臺中心管理員(超級管理員)主要負責管理平臺基本參數(shù)、用戶和用戶組的管理、應用管理、賬戶認證管理;各地區(qū)管理員主要負責管理轄區(qū)內(nèi)各單位用戶和用戶組的管理;平臺中心安全管理員可以根據(jù)IP、時間段、用戶名等進行安全審計,出現(xiàn)問題可以追溯。
②數(shù)據(jù)與業(yè)務功能的權(quán)限劃分
這部分權(quán)限主要依據(jù)組織機構(gòu)進行分級管理,組織機構(gòu)可分為總公司、地區(qū)公司、(地區(qū)下屬)子公司。
子公司用戶具備對本單位相關(guān)數(shù)據(jù)的訪問編輯權(quán)限,同時禁止對其他子公司的訪問和編輯權(quán)限;地區(qū)分公司具備對本地區(qū)范圍內(nèi)子公司的相關(guān)數(shù)據(jù)的訪問權(quán)限,不具備編輯權(quán)限,同時禁止對其他地區(qū)子公司的訪問和編輯權(quán)限;總公司具備對全國所有子公司相關(guān)數(shù)據(jù)的訪問權(quán)限,不具備編輯權(quán)限。
2.2.4 用戶操作審計
(1)管理員審計功能
日志可以提供查詢、備份等管理功能。各地區(qū)管理員可查詢本地區(qū)日志,中心平臺管理員可查詢所有日志;安全審計員可以備份、刪除日志;備份/刪除日志操作時間有記錄,備份/刪除的記錄不刪除;可對備份提醒進行設(shè)置,管理員登錄時系統(tǒng)將作出提醒。
(2)用戶賬戶審計功能
系統(tǒng)支持檢查某個用戶一段時間內(nèi)的使用情況,并且通過一系列安全策略建立起正常使用的模型。這樣當系統(tǒng)遭遇撞庫等攻擊時,能夠及時自動做出響應,符合動態(tài)防御的原則:包括檢查當前訪問網(wǎng)絡(luò)的用戶數(shù)量;檢查所有用戶的訪問高峰時間;發(fā)現(xiàn)試圖登錄無訪問權(quán)限計算機的用戶;查看任一用戶的所有登錄歷史;當同一用戶短時在不同地方登錄,追蹤分析用戶的活動及安全狀況;對用戶設(shè)置關(guān)注的重點事件進行實時預警等。
單點登錄是實現(xiàn)用戶一次登錄,可直接進入其他應用系統(tǒng)的功能,主流的單點登錄協(xié)議有SAML、CAS、OAuth、OIDC等[9]。
SAML 是基于XML 的標準認證協(xié)議,定義了身份提供者IDP(Identity Provider)和服務提供者SP(Service Provider)之間如何采用加密和簽名的方式來建立互信,從而交換用戶身份信息[10],SP 與IDP 的信任關(guān)系需要提前將雙方信息配置到對方,通過證書的方式建立。CAS(中央認證服務)是Yale 大學發(fā)起的一個開源項目,包含CAS Client 和CAS Server,將CAS Client 部署在客戶端,以過濾器的方式對每個訪問受保護資源的Web 請求檢查是否有Service Ticket,有則到CAS Server 進行驗證,二者間的互信是通過接口調(diào)用方式實現(xiàn)的,不具備簽名和加密機制。OAuth 一般指OAuth2.0,是一種授權(quán)協(xié)議,解決的主要是第三方應用如何被授權(quán)訪問資源服務器,由授權(quán)服務器負責授權(quán),適合多種場景;OIDC(OpenID Connect)在OAuth2.0 基礎(chǔ)上擴展了認證的場景,是現(xiàn)在最流行的協(xié)議,引入了id_token 概念表示資源擁有者的身份,標準化id_token 的格式就是JWT。SAML 和OIDC 有相似之處,均通過簽名和加密交換用戶身份信息,SAML是通過斷言,OIDC 則是通過id_token。
這些協(xié)議本質(zhì)都是基于中心信任的機制,SP 和IDP通過互信來交換用戶信息,只是交換的細節(jié)或概念有不同之處。
依據(jù)單點登錄實現(xiàn)方式,并為滿足未來業(yè)務系統(tǒng)可擴展,認證協(xié)議劃分為:已具備標準認證協(xié)議、提供接口可改造集成、C/S 架構(gòu)系統(tǒng)、不可改造的B/S 架構(gòu)。針對這些情況,分別提供不同的單點登錄解決方案。
(1)標準認證協(xié)議應用集成
針對支持上述標準認證協(xié)議的應用業(yè)務系統(tǒng),提供標準模板,只需點擊“添加應用”,進入后添加圖標,填寫應用名稱、所需支持設(shè)備類型、登錄地址等,便可完成集成工作。
(2)接口可改造應用集成
對于可改造(待開發(fā)中或支持二次開發(fā))的應用使用票據(jù)Token 方式,目標應用需配合調(diào)用身份認證中心提供的認證協(xié)議,根據(jù)應用業(yè)務系統(tǒng)認證機制確認是否需要API 接口完成。這里采用JWT,將Token 解析能力植入應用系統(tǒng),用戶只需登錄平臺認證,認證成功后返回主Token,登錄業(yè)務系統(tǒng)均由系統(tǒng)本身自行解析,對平臺性能損耗小、快捷。原理如圖5 所示,在應用端安裝一個公鑰(有插件),當客戶端發(fā)起請求時,身份認證服務端會返回一個通過私鑰簽名的Token 給客戶端;客戶端的瀏覽器通過302 跳轉(zhuǎn)將Token 傳遞給應用端,應用端通過公鑰驗證私鑰的簽名是否正確,如果正確就會登錄應用,從而實現(xiàn)單點登錄。
圖5 JWT 單點登錄原理圖
(3)C/S 架構(gòu)系統(tǒng)
對于C/S 架構(gòu)的應用,采用Kerberos 的代理方式進行集成。在客戶端的統(tǒng)一認證門戶點擊一個C/S 架構(gòu)應用圖標,客戶端就會通知服務端;服務端通過一個URI(喚醒PC 端的代理)返回一個Token(包含用戶的賬號密碼)給客戶端的代理,客戶端的代理拿到Token 之后,得知將要登錄的是哪個應用;代理喚醒將要登錄的應用,并將賬號密碼代填到應用;自動登錄到應用的服務端,單點登錄成功。
(4)不可改造的B/S 架構(gòu)系統(tǒng)
對于一些B/S 架構(gòu)應用系統(tǒng)不能停機或開發(fā)商不能配合改造的情況,采用表單代填模擬提交的方式。管理員為賬號關(guān)聯(lián)模板配置賬號密碼登錄功能及用戶認證參數(shù);用戶在系統(tǒng)中點擊應用系統(tǒng)訪問鏈接;平臺自動提取從賬號及密碼(加密存儲),將賬號及解密后的密碼自動填充到目標應用的表單并提交,實現(xiàn)應用系統(tǒng)的登錄。密碼采用AES 256 的加密方式。
目前集成的都是新開發(fā)的系統(tǒng),采用JWT 進行認證授權(quán)。JWT 常用于在IDP 和SP 之間傳遞通過認證的用戶身份信息,繼而獲取資源服務器中的資源[11],由頭部(header)、載荷(payload) 和簽名(signature) 三部分組成。header 中描述了signature 進行簽名的算法,playload 用于攜帶用戶信息,signature 對前兩部分編碼連接后,按照header 中的算法加密簽名。
Spring Security 框架為Java 程序提供用戶認證和用戶授權(quán)功能,實現(xiàn)認證和校驗身份的過濾器。系統(tǒng)在Spring Boot 中整合Spring Security,實現(xiàn)JWT 認證機制。
JWT 傳輸攜帶許多用戶信息,存儲在客戶端也有被竊取的危險,為保證JWT 在認證與授權(quán)過程中的安全,采用以下方式:
(1)避免在playload 中存放敏感信息;
(2)采用HTTPS 協(xié)議,對JWT 進行SSL 數(shù)據(jù)加密傳輸,保證網(wǎng)絡(luò)傳輸?shù)臋C密性,防止中間人攻擊;
(3)增強JWT 時效性,減少Token 被竊取盜用的可能性;
(4)在進行一些重要操作時,采用二次認證。
隨著企業(yè)信息化、智慧化的深入發(fā)展,將迎來信息化系統(tǒng)的爆發(fā)式增長,建設(shè)統(tǒng)一的身份管理平臺,為新系統(tǒng)的推出建立標準、提供便利;本質(zhì)中心化的信任機制,使得重要信息被納入統(tǒng)一、集中管理,既提升了管理效率、保障了信息安全,又讓應用系統(tǒng)能夠?qū)W⒂跇I(yè)務功能的實現(xiàn)。上述統(tǒng)一身份認證與單點登錄系統(tǒng)方案在中航油智慧加油系統(tǒng)中得到了初步的應用,為信息化系統(tǒng)提供統(tǒng)一的用戶管理與應用集成。本方案也為企業(yè)信息化系統(tǒng)的建設(shè)提供了參考。