漆瑞豐,周建中,劉 懿
(1.華中科技大學(xué)土木與水利工程學(xué)院,湖北 武漢 430074;2.華中科技大學(xué)數(shù)字流域科學(xué)與技術(shù)湖北省重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430074)
以數(shù)據(jù)為驅(qū)動(dòng)中心,一大批水利信息化系統(tǒng),如防洪調(diào)度、大壩安全監(jiān)測、水資源智慧調(diào)配等在各單位有效部署運(yùn)行;這有力支撐了水利行業(yè)各項(xiàng)業(yè)務(wù)工作[1]。水文、氣象、地形等數(shù)據(jù)由于其特殊性,往往具有較高的安全等級,在水利信息化快速發(fā)展的同時(shí),保障這些數(shù)據(jù)在網(wǎng)絡(luò)傳輸過程中的信息安全成為水利信息化進(jìn)一步安全快速發(fā)展的必要條件。水利行業(yè)各級單位在網(wǎng)絡(luò)安全法的基礎(chǔ)上,統(tǒng)籌考慮水利信息化過程中可能遇到的各種安全問題,高起點(diǎn)頂層設(shè)計(jì);初步建立起網(wǎng)絡(luò)安全保障體系[2]。
傳統(tǒng)的水資源管理系統(tǒng)采用單體式架構(gòu),每一個(gè)服務(wù)完整承擔(dān)前后臺(tái)功能,每個(gè)業(yè)務(wù)系統(tǒng)都是獨(dú)立的整體。但隨著水資源管理決策支持系統(tǒng)越來越多,數(shù)據(jù)安全等級越來越高,傳統(tǒng)單體式架構(gòu)已經(jīng)難以滿足當(dāng)前業(yè)務(wù)需求,所以現(xiàn)在的水資源管理決策支持系統(tǒng)采取了前后端分離的微服務(wù)架構(gòu)。
在微服務(wù)架構(gòu)下,基于簡單Session/Cookie的認(rèn)證方式已無法滿足分布式微服務(wù)系統(tǒng)的認(rèn)證、鑒權(quán)需求。因此,為了適應(yīng)如今系統(tǒng)框架和安全需求的變化和日益復(fù)雜的業(yè)務(wù)需求,需要將系統(tǒng)的認(rèn)證鑒權(quán)模塊獨(dú)立出來?;趖oken令牌網(wǎng)絡(luò)安全體系的隨機(jī)性強(qiáng)、不可預(yù)測性高以及無法輕易破解等特點(diǎn)恰好滿足了水資源管理決策支持系統(tǒng)專業(yè)化復(fù)雜業(yè)務(wù)應(yīng)用對安全性的需要。
身份認(rèn)證是防止非法用戶進(jìn)入系統(tǒng)訪問受保護(hù)資源、服務(wù)的重要方法,也是部分網(wǎng)絡(luò)攻擊的重要手段[3]。采用token身份認(rèn)證機(jī)制,能較好解決當(dāng)前水資源管理決策支持系統(tǒng)中的身份認(rèn)證及權(quán)限鑒別等問題。當(dāng)物聯(lián)網(wǎng)客戶端(用戶或者終端設(shè)備)發(fā)起登錄或連接請求時(shí),系統(tǒng)服務(wù)器端會(huì)根據(jù)用戶或者物聯(lián)網(wǎng)終端設(shè)備的注冊信息,生成一串用于用戶訪問憑據(jù)的字符串,并將其反饋給客戶端作為token令牌[4]。
基于token的身份認(rèn)證,用戶的密碼等信息將不再存儲(chǔ)在客戶端或者服務(wù)端。在解決敏感信息存儲(chǔ)問題的同時(shí)釋放了服務(wù)器資源,而且服務(wù)端不用再耗費(fèi)資源判斷用戶是否處于登錄狀態(tài)[4]。下面詳細(xì)闡述基于token的身份認(rèn)證方法[5-7]:
步驟1,客戶端使用用戶名和密碼請求登錄。
步驟2,服務(wù)端收到請求,去驗(yàn)證用戶名與密碼。
步驟3,驗(yàn)證成功后,服務(wù)端簽發(fā)一個(gè)token,token與用戶名對應(yīng)。token一般可存儲(chǔ)在緩存或數(shù)據(jù)庫中,方便查詢驗(yàn)證;再把token發(fā)送給客戶端。
步驟4,客戶端收到token后將其存儲(chǔ)在數(shù)據(jù)庫或者Local Storage中。
步驟5,客戶端每次向服務(wù)端請求資源時(shí),需要標(biāo)識(shí)服務(wù)端簽發(fā)的token信息。
步驟6,服務(wù)端收到請求后,驗(yàn)證客戶端請求標(biāo)識(shí)的token,如果驗(yàn)證成功,返回請求的數(shù)據(jù)(見圖1)。
圖1 token驗(yàn)證步驟
token技術(shù)是搭建水資源管理決策支持系統(tǒng)網(wǎng)絡(luò)安全框架的關(guān)鍵技術(shù)。利用此技術(shù),可以將受保護(hù)的后臺(tái)水利專業(yè)模型資源和前端瀏覽器或者客戶端隔離,從而保障后臺(tái)的資源安全;同時(shí),當(dāng)水資源管理決策支持系統(tǒng)有拓展業(yè)務(wù)需求時(shí),可以借助token進(jìn)行鑒權(quán),在保障安全的同時(shí)直接進(jìn)行數(shù)據(jù)共享,避免了各個(gè)系統(tǒng)重新整合的麻煩。
分布式系統(tǒng)架構(gòu)是將分散的計(jì)算機(jī)資源整合為一個(gè)整體,向用戶提供一致性調(diào)用、監(jiān)控和管理功能的系統(tǒng)結(jié)構(gòu);同時(shí),將系統(tǒng)擁有的多種通用的物理和邏輯資源,根據(jù)任務(wù)需求動(dòng)態(tài)分配,并通過計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)物理和邏輯資源的信息交換。
本文考慮到水資源管理決策支持系統(tǒng)采用基于面向服務(wù)(SOA)的架構(gòu)技術(shù),將水資源管理多專業(yè)模型服務(wù)統(tǒng)一部署,以小規(guī)模服務(wù)集群的方式運(yùn)行,通過服務(wù)接口的方式提供給應(yīng)用開發(fā)者。為此,采用token技術(shù)搭建統(tǒng)一權(quán)限中心,對整個(gè)系統(tǒng)的安全權(quán)限進(jìn)行管理;同時(shí),搭建統(tǒng)一數(shù)據(jù)服務(wù)系統(tǒng),避免大量第三方應(yīng)用直接讀寫數(shù)據(jù)庫對數(shù)據(jù)庫造成安全威脅。
2.1.1 安全框架構(gòu)建
在上述的分布式架構(gòu)中,為了保證前端瀏覽器和后臺(tái)服務(wù)、后臺(tái)服務(wù)與數(shù)據(jù)庫的通信安全,防止用戶信息(用戶名/密碼)泄露,設(shè)計(jì)了如圖2所示的安全框架。
圖2 安全框架示意
安全框架分為4個(gè)角色:
(1)資源擁有者(resource owner)。水利模型服務(wù)資源實(shí)際擁有者,擁有定義實(shí)際訪問權(quán)限或授權(quán)許可的實(shí)體,通常是水利流域管理部門。如,各流域水資源部、梯調(diào)中心等,也可包括后續(xù)可接入系統(tǒng)的其他水利專業(yè)模型的開發(fā)部門。在本網(wǎng)絡(luò)安全中框架,資源擁有者為流域管理者,是具有流域調(diào)度權(quán)限的調(diào)度部門。使用水資源管理支持系統(tǒng)的專業(yè)調(diào)度人員在獲得流域管理者(資源擁有者)的授權(quán)后,便可以請求相應(yīng)水利專業(yè)模型,并得到相關(guān)結(jié)果。流域調(diào)度人員可以通過Web瀏覽器、PC桌面客戶端或者移動(dòng)終端應(yīng)用等支持REST服務(wù)的終端請求服務(wù)。
(2)資源服務(wù)器(resource server)。它用于存儲(chǔ)用戶受保護(hù)的數(shù)據(jù)和服務(wù)資源,如發(fā)電優(yōu)化模型水電站96點(diǎn)日計(jì)劃對應(yīng)表、中長期預(yù)報(bào)最大最小值儲(chǔ)存表等流域和水庫運(yùn)行相關(guān)信息;中長發(fā)電期優(yōu)化調(diào)度、庫群模擬及河道模擬等專業(yè)水利業(yè)務(wù)計(jì)算模型。流域調(diào)度員(客戶端)通過授權(quán)令牌向資源服務(wù)器請求資源,資源服務(wù)器處理訪問請求。受保護(hù)的水利專業(yè)模型等資源部署在資源服務(wù)器中,被封裝成服務(wù)并對外提供可調(diào)用。
(3)統(tǒng)一鑒權(quán)中心(Unified Authentication Center)。統(tǒng)一鑒權(quán)中心擁有者為流域相關(guān)調(diào)度部門,由相關(guān)流域職能部門決定調(diào)度員是否具有相關(guān)水利模型或數(shù)據(jù)的調(diào)用權(quán)限。統(tǒng)一鑒權(quán)中心是網(wǎng)絡(luò)安全框架的核心組件,它承擔(dān)了系統(tǒng)登陸認(rèn)證發(fā)放token、授權(quán)的核心功能。當(dāng)外部請求水利專業(yè)模型服務(wù)接口時(shí),會(huì)先被統(tǒng)一鑒權(quán)中心攔截,身份驗(yàn)證通過后發(fā)放token。
(4)統(tǒng)一數(shù)據(jù)服務(wù)(Unified Data Service)。該服務(wù)用于接收資源服務(wù)器的服務(wù)發(fā)送帶token的數(shù)據(jù)庫操作請求,解析請求頭字段中的token信息,并向統(tǒng)一鑒權(quán)中心發(fā)送token驗(yàn)證請求,在接收到統(tǒng)一鑒權(quán)中心返回的token合法信息后,對數(shù)據(jù)庫進(jìn)行相應(yīng)的增、刪、改、查操作,返回?cái)?shù)據(jù)信息或操作結(jié)果給資源服務(wù)器。
基于token令牌的網(wǎng)絡(luò)安全體系框架,可將水資源管理決策系統(tǒng)中的后臺(tái)重要服務(wù)資源和前端瀏覽器或客戶分離,保障了后臺(tái)服務(wù)和數(shù)據(jù)庫數(shù)據(jù)的安全。同時(shí),在網(wǎng)絡(luò)傳輸過程中,不直接傳輸用戶名和密碼,而是用于證明身份的token值,進(jìn)一步保障了用戶的信息安全,提高了系統(tǒng)的整體安全性。
2.1.2 基于token的認(rèn)證及鑒權(quán)
在水資源管理決策支持系統(tǒng)的實(shí)際應(yīng)用中,一般用戶只有訪問一般后臺(tái)服務(wù)的需求,而系統(tǒng)管理員承擔(dān)著用戶的創(chuàng)建、刪除、修改等任務(wù)。針對此需求,應(yīng)用系統(tǒng)給用戶設(shè)計(jì)了不同的權(quán)限等級。不同用戶登陸后,根據(jù)角色不同,可以請求到服務(wù)端不同的資源。用戶登錄是基于令牌身份認(rèn)證的核心功能。具體登錄過程時(shí)序見圖3。
圖3 登陸時(shí)序示意
基于token的水資源管理決策支持系統(tǒng)登陸過程和處理機(jī)制如下:當(dāng)用戶第一次登陸時(shí),瀏覽器會(huì)將用戶名密碼加密,并用post請求將密文發(fā)送到資源服務(wù)器。在資源服務(wù)器接收到請求之前,授權(quán)服務(wù)器會(huì)將請求攔截,獲取請求參數(shù)的用戶名密碼,調(diào)用認(rèn)證服務(wù)。認(rèn)證服務(wù)將會(huì)根據(jù)用戶名從數(shù)據(jù)庫中取出用戶真實(shí)密碼,對比兩者的差異,若認(rèn)證通過則生成token令牌。最后,認(rèn)證服務(wù)器將驗(yàn)證結(jié)果和生成的token令牌返回給客戶端或前端瀏覽器,客戶端或前端瀏覽器將令牌存儲(chǔ)在本地,作為請求資源的鑒權(quán)憑證。
當(dāng)前用戶再次請求后臺(tái)受保護(hù)水利專業(yè)模型服務(wù)時(shí),會(huì)將上次登陸時(shí)儲(chǔ)存在瀏覽器緩存中token值加到請求頭字段中一起發(fā)送給后臺(tái)指定REST服務(wù)。后臺(tái)服務(wù)接收到請求之后,首先解析請求頭信息,提取對象信息和token值并將其發(fā)送給授權(quán)服務(wù)器。授權(quán)服務(wù)器根據(jù)用戶信息在數(shù)據(jù)庫中驗(yàn)證token的合法性并對其角色進(jìn)行判斷,確認(rèn)令牌合法性和對應(yīng)角色之后再請求對應(yīng)的資源服務(wù)獲取用戶所需資源,并返回結(jié)果給資源控制器[6];最后將數(shù)據(jù)返回到前端。
隨著現(xiàn)代水利信息資源的深入開發(fā)和利用,越來越多的專業(yè)模塊集成到水資源管理決策支持系統(tǒng);同時(shí),還會(huì)有其他的系統(tǒng)或者服務(wù)調(diào)用本系統(tǒng)的接口或者計(jì)算數(shù)據(jù)。在這種應(yīng)用背景下,重新將兩個(gè)系統(tǒng)進(jìn)行整合不僅難度大,費(fèi)時(shí)費(fèi)力,延誤系統(tǒng)應(yīng)用的最佳時(shí)期;而且將本系統(tǒng)水利專業(yè)模型服務(wù)接口全部暴露,增加安全隱患。而基于token的鑒權(quán)方案可以完美解決這一實(shí)際難題。若有第三方系統(tǒng)或者應(yīng)用需要接入水資源管理決策支持系統(tǒng)時(shí),系統(tǒng)管理員會(huì)分配給此應(yīng)用一個(gè)client_ID。當(dāng)其請求受保護(hù)資源時(shí),將會(huì)被授權(quán)服務(wù)器攔截。授權(quán)服務(wù)器判斷請求角色,判斷角色是否具有訪問權(quán)限,若具有訪問權(quán)限則發(fā)放token,第三方攜帶token便可以請求資源服務(wù)器的相關(guān)水利專業(yè)資源。系統(tǒng)鑒權(quán)流程如圖4所示。
圖4 基于token的鑒權(quán)流程示意
水資源管理決策支持系統(tǒng)網(wǎng)絡(luò)安全體系框架提供了一套完整的身份認(rèn)證鑒權(quán)流程及方法,以此為基礎(chǔ),開展了系統(tǒng)集成工作,并研究了安全框架的實(shí)現(xiàn)技術(shù)。
(1)Spring Security。Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式安全訪問控制解決方案的安全框架。其提供了一組可以在Spring應(yīng)用上下文中配置的Bean及相關(guān)的配置文檔,借助IOC(控制反轉(zhuǎn)),DI(依賴注入)和AOP(面向切面編程)功能將用戶身份認(rèn)證進(jìn)行統(tǒng)一的管理,從而實(shí)現(xiàn)對資源訪問的綜合管控與維護(hù)[8]。Spring Security本質(zhì)是提供了一整套完整的過濾器鏈,方便快捷的攔截請求,將生成的token值添加到請求頭發(fā)送至下一服務(wù)。全面利用Spring所提供出的強(qiáng)大功能,為各企業(yè)當(dāng)中所使用的程序自身安全性能提供了有效且快速的解決方案[9]。采用Spring Security技術(shù),可以為快速為水資源決策支持系統(tǒng)網(wǎng)絡(luò)安全體系提供網(wǎng)絡(luò)請求攔截技術(shù),方便自定義生成token值。
(2)OAuth2.0協(xié)議。OAuth2.0協(xié)議是一種專門針對跨平臺(tái)應(yīng)用之間認(rèn)證授權(quán)而設(shè)計(jì)的框架協(xié)議,其最新版本OAuth2.0于2012年10月發(fā)布,稱為RFC 6749[10]。該協(xié)議允許在應(yīng)用之間通過重定向方式讓用戶顯示而明確地參與授權(quán)過程,并且保護(hù)用戶關(guān)鍵的憑證(口令)信息[11-12],允許第三方應(yīng)用程序使用該用戶的私有資源(如個(gè)人信息、照片、通訊錄等),而無需將用戶名和密碼直接提供給第三方應(yīng)用程序。OAuth2.0協(xié)議已經(jīng)成為互聯(lián)網(wǎng)上主流的開放平臺(tái)授權(quán)方式,得到了眾多互聯(lián)網(wǎng)企業(yè)支持[10-14]。OAuth2.0協(xié)議為水資源管理決策支持系統(tǒng)的可拓展性提供了技術(shù)支持,可以在保護(hù)用戶信息和資源安全的前提下允許第三方應(yīng)用訪問,使得系統(tǒng)的應(yīng)用更加廣泛。
金沙江下游—三峽梯級水庫群是長江流域最大的水庫群,水能資源豐富。針對該水庫群防洪、發(fā)電的復(fù)雜需求,需研發(fā)一套滿足各方面綜合需求的水資源管理決策支持系統(tǒng)。系統(tǒng)的所有數(shù)據(jù)全部存儲(chǔ)在三峽梯調(diào)數(shù)據(jù)服務(wù)器的數(shù)據(jù)庫中,涉及長江上游干支流流域氣象水文數(shù)據(jù),河道、水庫、機(jī)組基礎(chǔ)數(shù)據(jù),以及金沙江—三峽梯級各水庫的各個(gè)時(shí)間段的流量、出力、水頭、發(fā)電量和水庫運(yùn)行工況等數(shù)據(jù)。采用本文研究方法,搭建的基于token令牌的水資源管理決策支持系統(tǒng)網(wǎng)絡(luò)安全框架如圖5所示。
圖5 水資源管理決策支持系統(tǒng)網(wǎng)絡(luò)安全框架
圖6 請求得到token值
圖7 請求服務(wù)時(shí)攜帶token值
基于token令牌的網(wǎng)絡(luò)安全框架體系已集成到金沙江下游—三峽梯級水資源管理決策支持系統(tǒng),并經(jīng)過安裝、測試、部署和試運(yùn)行,目前已經(jīng)在中國長江電力股份有限公司宜昌梯級調(diào)度中心上線應(yīng)用。系統(tǒng)相關(guān)界面和應(yīng)用效果以及相應(yīng)token生成流程如圖6、7所示。
本文通過分析傳統(tǒng)基于Session/Cookie的網(wǎng)絡(luò)安全認(rèn)證流程及其認(rèn)證方式的不足,闡述了基于token的網(wǎng)絡(luò)認(rèn)證方式的優(yōu)勢,結(jié)合水資源管理決策支持系統(tǒng)搭建了一套網(wǎng)絡(luò)安全體系,既保護(hù)了后臺(tái)資源、數(shù)據(jù),提升了系統(tǒng)的安全性,又避免了用戶重復(fù)登陸的繁瑣操作,提高了用戶體驗(yàn)。目前水資源管理決策支持系統(tǒng)網(wǎng)絡(luò)安全體系生成的token值由OAuth2.0內(nèi)置實(shí)現(xiàn),后續(xù)還可以對token值的生成算法進(jìn)行改進(jìn),增強(qiáng)個(gè)性化,為使用系統(tǒng)的用戶建立更加完善的安全屏障。