關(guān)鍵詞: 身份單點(diǎn)認(rèn)證 企業(yè)多級(jí)部署 企業(yè)級(jí)級(jí)聯(lián)認(rèn)證 無(wú)差異訪問(wèn)
中圖分類號(hào): TP31 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1672-3791(2023)16-0021-05
隨著企業(yè)數(shù)字化建設(shè)的快速深入推進(jìn),企業(yè)應(yīng)用對(duì)可靠性易用性的要求也逐步提高。在大型央企中,在各個(gè)應(yīng)用的部署模式上,有的應(yīng)用是在總部實(shí)現(xiàn)統(tǒng)一部署,有的應(yīng)用是總部與子級(jí)分公司實(shí)現(xiàn)多級(jí)部署的模式,這兩種模式并存。在央企推動(dòng)改革創(chuàng)新的過(guò)程中,子級(jí)分公司的個(gè)性化需求更偏向于切合自身實(shí)際情況的需求,因此根據(jù)不同應(yīng)用的實(shí)際情況,多種部署方式的情況會(huì)一直持續(xù)下去。因此,在子級(jí)分公司用戶的日常辦公中,子級(jí)分公司的本地業(yè)務(wù)應(yīng)用與總部業(yè)務(wù)應(yīng)用具有系統(tǒng)整合需求。這種系統(tǒng)整合主要采用界面集成的方式,大型企業(yè)一般是建設(shè)統(tǒng)一門戶[1]作為統(tǒng)一入口,用戶一次登錄之后,可以訪問(wèn)有權(quán)限的業(yè)務(wù)應(yīng)用,尤其是跨單位、跨域的場(chǎng)景下,界面集成須依賴具備級(jí)聯(lián)能力的認(rèn)證服務(wù)支撐。
在此種情況下,如何保障統(tǒng)一部署的應(yīng)用與多級(jí)部署應(yīng)用之間的認(rèn)證互通,確保用戶登錄統(tǒng)一門戶之后能直接訪問(wèn)一級(jí)部署與多級(jí)部署的業(yè)務(wù)應(yīng)用,是一個(gè)突出的問(wèn)題。本文結(jié)合支撐國(guó)網(wǎng)公司企業(yè)內(nèi)部的級(jí)聯(lián)認(rèn)證經(jīng)驗(yàn),從數(shù)據(jù)同步[2]、級(jí)聯(lián)認(rèn)證、安全防護(hù)等方面提出的基于企業(yè)級(jí)的完整級(jí)聯(lián)認(rèn)證方案,并闡述了該方案在國(guó)網(wǎng)公司的實(shí)際應(yīng)用情況。
1 總體架構(gòu)
國(guó)家電網(wǎng)公司業(yè)務(wù)應(yīng)用中,主要分成總部一級(jí)部署、省市公司二級(jí)部署兩種部署方式:一是在國(guó)網(wǎng)總部集中部署,供全網(wǎng)使用的一級(jí)部署應(yīng)用;二是總部網(wǎng)省兩級(jí)部署,或是省市自建而部署在省市公司的二級(jí)部署應(yīng)用。
1.1 統(tǒng)一權(quán)限平臺(tái)
統(tǒng)一權(quán)限平臺(tái)作為國(guó)網(wǎng)公司統(tǒng)一的身份認(rèn)證、權(quán)限管理平臺(tái),承載了全網(wǎng)用戶身份數(shù)據(jù)的集中管理與業(yè)務(wù)應(yīng)用的統(tǒng)一認(rèn)證業(yè)務(wù)。業(yè)務(wù)應(yīng)用通過(guò)與統(tǒng)一權(quán)限平臺(tái)集成,實(shí)現(xiàn)了身份維護(hù)與數(shù)據(jù)同步,用戶訪問(wèn)業(yè)務(wù)應(yīng)用之間的單點(diǎn)登錄[3],一來(lái)可以降低開發(fā)成本,二來(lái)可通過(guò)統(tǒng)一權(quán)限的集中化管理,提升國(guó)網(wǎng)公司整體身份認(rèn)證的安全防護(hù)能力。
1.2 統(tǒng)一門戶
國(guó)網(wǎng)公司通過(guò)信息化的不斷深入,建設(shè)了一套基于統(tǒng)一單點(diǎn)認(rèn)證服務(wù)的內(nèi)網(wǎng)企業(yè)門戶,形成企業(yè)級(jí)認(rèn)證、統(tǒng)一的門戶展示、便捷性業(yè)務(wù)應(yīng)用訪問(wèn)入口、平臺(tái)級(jí)防護(hù)、開放式框架等核心能力,改變了大而全、專業(yè)間相互獨(dú)立的企業(yè)級(jí)門戶應(yīng)用建設(shè)方式,實(shí)現(xiàn)應(yīng)用入口集中、防護(hù)集中。
統(tǒng)一門戶在總部與網(wǎng)省都有個(gè)性化的一套部署,無(wú)論是網(wǎng)省還是總部用戶,都會(huì)通過(guò)各自的門戶平臺(tái)去實(shí)現(xiàn)線上辦公。統(tǒng)一權(quán)限平臺(tái)同為兩級(jí)部署架構(gòu),目前已分別實(shí)現(xiàn)了總部、省市公司W(wǎng)eb 端業(yè)務(wù)應(yīng)用的身份納管和統(tǒng)一認(rèn)證,如圖1 所示。用戶登錄統(tǒng)一門戶之后,如果訪問(wèn)總部一級(jí)部署的信息化應(yīng)用,則需要統(tǒng)一權(quán)限平臺(tái)建立一套針對(duì)企業(yè)級(jí)應(yīng)用的級(jí)聯(lián)認(rèn)證機(jī)制。
企業(yè)級(jí)級(jí)聯(lián)認(rèn)證主要采用OAuth2.0[4]協(xié)議實(shí)現(xiàn)業(yè)務(wù)應(yīng)用的授權(quán)管理,統(tǒng)一權(quán)限在認(rèn)證協(xié)議上支持CAS、OAuth2.0 認(rèn)證體系。要實(shí)現(xiàn)企業(yè)級(jí)的級(jí)聯(lián)認(rèn)證,兩級(jí)統(tǒng)一權(quán)限的認(rèn)證服務(wù)之間需要形成一種安全互信機(jī)制,實(shí)現(xiàn)的用戶身份票據(jù)互。另外,兩級(jí)統(tǒng)一權(quán)限之間要建立完善的數(shù)據(jù)同步機(jī)制,確保兩側(cè)數(shù)據(jù)一致。
2 級(jí)聯(lián)認(rèn)證
2.1 單點(diǎn)登錄與級(jí)聯(lián)認(rèn)證
單點(diǎn)登錄的過(guò)程大致如下:首先,用戶登錄統(tǒng)一門戶成功之后,在門戶中點(diǎn)擊業(yè)務(wù)應(yīng)用圖標(biāo);其次,業(yè)務(wù)應(yīng)用跳轉(zhuǎn)統(tǒng)一認(rèn)證進(jìn)行登錄,統(tǒng)一認(rèn)證校驗(yàn)業(yè)務(wù)應(yīng)用合法性之后,為業(yè)務(wù)應(yīng)用頒發(fā)一次性單點(diǎn)票據(jù),并重定向回業(yè)務(wù)應(yīng)用;最后,業(yè)務(wù)應(yīng)用后臺(tái)用一次性票據(jù)到統(tǒng)一權(quán)限獲得用戶信息,登錄結(jié)束。普通的單點(diǎn)登錄,整個(gè)登錄流程只需要對(duì)應(yīng)部署下統(tǒng)一權(quán)限參與,如圖2所示。
一級(jí)應(yīng)用(以黨建系統(tǒng)為例)的單點(diǎn)登錄流程,在票據(jù)校驗(yàn)過(guò)程與普通單點(diǎn)登錄產(chǎn)生了差異。門戶為業(yè)務(wù)應(yīng)用在本地統(tǒng)一權(quán)限申請(qǐng)授權(quán)碼;獲得授權(quán)碼后,將瀏覽器的請(qǐng)求認(rèn)證指向一級(jí)認(rèn)證地址,同時(shí)攜帶業(yè)務(wù)應(yīng)用的回跳地址;接下來(lái)一級(jí)收到授權(quán)碼,到二級(jí)統(tǒng)一權(quán)限校驗(yàn)授權(quán)碼,并獲取到用戶;獲取成功之后,在一級(jí)統(tǒng)一權(quán)限為業(yè)務(wù)應(yīng)用用戶生成一次性單點(diǎn)票,后續(xù)流程同普通單點(diǎn)登錄流程,最后完成級(jí)聯(lián)認(rèn)證登錄,如圖3 所示。
2.2 級(jí)聯(lián)認(rèn)證詳細(xì)過(guò)程
圖4 描述了網(wǎng)省用戶在二級(jí)統(tǒng)一門戶中點(diǎn)擊一級(jí)業(yè)務(wù)應(yīng)用開始,直至用戶登錄成功訪問(wèn)一級(jí)業(yè)務(wù)應(yīng)用的全過(guò)程。下面對(duì)登錄過(guò)程進(jìn)行詳細(xì)說(shuō)明。
2.2.1 統(tǒng)一門戶申請(qǐng)權(quán)碼
前提條件:用戶首先登錄到統(tǒng)一門戶,當(dāng)前統(tǒng)一門戶已經(jīng)完成安全認(rèn)證。
首先,用戶點(diǎn)擊統(tǒng)一門戶中的一級(jí)業(yè)務(wù)應(yīng)用,一級(jí)業(yè)務(wù)應(yīng)用發(fā)現(xiàn)用戶是未登錄狀態(tài),告知統(tǒng)一門戶,統(tǒng)一門戶向二級(jí)統(tǒng)一權(quán)限申請(qǐng)授權(quán)碼Authorization Code。其次,二級(jí)統(tǒng)一權(quán)限對(duì)當(dāng)前用戶身份進(jìn)行確認(rèn),若確認(rèn)是合法應(yīng)用,則頒發(fā)Authorization Code 并給統(tǒng)一門戶。
2.2.2 統(tǒng)一門戶向一級(jí)應(yīng)用提交登錄票
前提條件:統(tǒng)一門戶已經(jīng)申請(qǐng)到業(yè)務(wù)應(yīng)用的AuthorizationCode,在此步驟中將涉及級(jí)聯(lián)認(rèn)證的過(guò)程。首先,統(tǒng)一門戶跳轉(zhuǎn)一級(jí)統(tǒng)一認(rèn)證,同時(shí)告知對(duì)應(yīng)Authorization Code、APPID(權(quán)限頒發(fā)的應(yīng)用ID)、service(應(yīng)用的回跳地址)以及申請(qǐng)票據(jù)的二級(jí)認(rèn)證服務(wù)地址(Proxy Url)。其次,一級(jí)統(tǒng)一權(quán)限對(duì)應(yīng)用信息進(jìn)行確認(rèn),若確認(rèn)是合法應(yīng)用,將根據(jù)提供的認(rèn)證地址,向二級(jí)統(tǒng)一權(quán)限發(fā)起授權(quán)碼驗(yàn)證申請(qǐng)。再次,二級(jí)統(tǒng)一權(quán)限對(duì)請(qǐng)求來(lái)源進(jìn)行互信驗(yàn)證,明確對(duì)方來(lái)源之后,對(duì)其授權(quán)碼進(jìn)行驗(yàn)證是否合法有效,確認(rèn)AuthorizationCode 有效后,響應(yīng)當(dāng)前登錄用戶信息。最后,一級(jí)統(tǒng)一權(quán)限獲取到用戶身份信息之后,獲取本地的用戶身份信息,然后為業(yè)務(wù)應(yīng)用生成一次性單點(diǎn)票,并重定向回業(yè)務(wù)應(yīng)用。
2.2.3 一級(jí)業(yè)務(wù)應(yīng)用使用登錄
票完成登錄使用ticket 完成登錄,在此過(guò)程中,回到了正常的業(yè)務(wù)應(yīng)用與認(rèn)證的集成流程中。業(yè)務(wù)應(yīng)用拿到ticket之后,就可以進(jìn)行登錄操作了。
首先,業(yè)務(wù)應(yīng)用客戶端攜帶ticket 訪問(wèn)后臺(tái),請(qǐng)求登錄;業(yè)務(wù)應(yīng)用后臺(tái)攜帶ticket,前往一級(jí)部署的統(tǒng)一權(quán)限進(jìn)行身份確認(rèn)。其次,ticket 由一級(jí)權(quán)限頒發(fā),因此一級(jí)業(yè)務(wù)應(yīng)用可以直接識(shí)別ticket,同時(shí)提供本地用戶信息。最后,業(yè)務(wù)應(yīng)用拿到用戶信息,生成自身會(huì)話信息,登錄成功。
3 保障機(jī)制
3.1 數(shù)據(jù)一致性
保障總部與網(wǎng)省的數(shù)據(jù)的一致性是完成級(jí)聯(lián)認(rèn)證的基礎(chǔ),確保用戶在兩級(jí)統(tǒng)一權(quán)限進(jìn)行級(jí)聯(lián)認(rèn)證時(shí)可以通過(guò)唯一的身份主鍵信息確認(rèn)雙方各自身份。依據(jù)國(guó)家電網(wǎng)信息系統(tǒng)的主要技術(shù)路線,在國(guó)網(wǎng)目前已集成的信息系統(tǒng),他們?cè)跇I(yè)務(wù)數(shù)據(jù)持久化上,選擇的是關(guān)系型數(shù)據(jù)庫(kù),而在對(duì)數(shù)據(jù)源的操作上是通過(guò)JDBC[5]驅(qū)動(dòng)來(lái)完成。在企業(yè)應(yīng)用數(shù)據(jù)一致性的關(guān)鍵技術(shù)架構(gòu)中,有典型如Oracle GodenGate 以及類似產(chǎn)品,用以實(shí)現(xiàn)各種關(guān)系型數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步,保證數(shù)據(jù)的一致性,其支持如SQL 56^61、032 等多種目前市面上常用的數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步,但是其主要依托于數(shù)據(jù)庫(kù)本身數(shù)據(jù)備份機(jī)制去直接實(shí)現(xiàn)兩邊數(shù)據(jù)內(nèi)容的一致性,對(duì)于開發(fā)者是無(wú)法感知與干預(yù)其同步過(guò)程,導(dǎo)致其擴(kuò)展性有限,該方式多用于系統(tǒng)災(zāi)難級(jí)備份。
根據(jù)信息化系統(tǒng)的實(shí)際情況,各個(gè)系統(tǒng)之間的數(shù)據(jù)模型設(shè)計(jì)是不一致的,更多各個(gè)系統(tǒng)保留有自身獨(dú)特的業(yè)務(wù),因此通過(guò)底層數(shù)據(jù)同步去完成數(shù)據(jù)的一致性[6],是無(wú)法在企業(yè)信息化建設(shè)中所適用的,在數(shù)據(jù)同步過(guò)程中涉及業(yè)務(wù)的轉(zhuǎn)換。采用JDBC 驅(qū)動(dòng)的對(duì)數(shù)據(jù)的操作,在每一次的完整業(yè)務(wù)數(shù)據(jù)處理操作中,程序設(shè)計(jì)會(huì)對(duì)整個(gè)業(yè)務(wù)流程進(jìn)行控制,確保以業(yè)務(wù)為單位的每次操作都能統(tǒng)一入庫(kù)或者統(tǒng)一回退。但是在基于JDBC 進(jìn)行原始數(shù)據(jù)采集時(shí),需要保證數(shù)據(jù)的一致性與數(shù)據(jù)同步的時(shí)序性問(wèn)題,具體應(yīng)對(duì)方式如下。
3.1.1 提供JDBC 代理
在當(dāng)前系統(tǒng)接入之前,國(guó)網(wǎng)信息化系統(tǒng)已初具規(guī)模,在實(shí)際生產(chǎn)邏輯復(fù)雜的情況下,要實(shí)現(xiàn)兩級(jí)身份數(shù)據(jù)的一致性,是非常復(fù)雜、繁瑣的一個(gè)過(guò)程,并且如何處理已建系統(tǒng)的數(shù)據(jù)采集,避免過(guò)多的系統(tǒng)改造、業(yè)務(wù)的侵入,是數(shù)據(jù)采集需要整體考慮的風(fēng)險(xiǎn)。
基于現(xiàn)有實(shí)際業(yè)務(wù)架構(gòu)的分析與信息化系統(tǒng)的特性,可以JDBC 驅(qū)動(dòng)作為切入點(diǎn),通過(guò)監(jiān)聽驅(qū)動(dòng)的增刪改操作,來(lái)進(jìn)行數(shù)據(jù)采集,不僅在現(xiàn)有信息化架構(gòu)設(shè)計(jì)的事務(wù)性考慮上,滿足每次業(yè)務(wù)操作的原子性,同時(shí)能夠避免對(duì)業(yè)務(wù)層代碼的侵入,保證每次操作的原子性,降低對(duì)現(xiàn)有系統(tǒng)業(yè)務(wù)層的改造帶來(lái)的業(yè)務(wù)風(fēng)險(xiǎn),同時(shí)可以保證原始數(shù)據(jù)采集的業(yè)務(wù)連貫性與原子性。
3.1.2 自動(dòng)重試與手動(dòng)處理
數(shù)據(jù)的一致性是在跨多系統(tǒng)的數(shù)據(jù)同步中最為常見(jiàn)的問(wèn)題,而在不同的業(yè)務(wù)需求場(chǎng)景下對(duì)數(shù)據(jù)一致性又區(qū)分為強(qiáng)一致性、弱一致性以及最終一致性。在這3 個(gè)一致性定義中,強(qiáng)一致性缺點(diǎn)很突出,就是會(huì)導(dǎo)致系統(tǒng)整體可用性不高,然而弱一致性雖然是系統(tǒng)可用性更高,但因?yàn)閿?shù)據(jù)無(wú)法保證完整的一致,最顯著的情況就是導(dǎo)致強(qiáng)關(guān)聯(lián)業(yè)務(wù)出現(xiàn)問(wèn)題,影響正常使用。而基于數(shù)據(jù)的最終一致性,在滿足系統(tǒng)可用性的同時(shí),也能盡最大可能避免業(yè)務(wù)不一致帶來(lái)的影響。
在系統(tǒng)間數(shù)據(jù)同步的架構(gòu)設(shè)計(jì)中,CAP 理論一直是所有廠商在需求解決的問(wèn)題,然后卻一直無(wú)法有效解決,只能盡可能避免。因此,更多廠商為提升系統(tǒng)的可用性,大多都采用最終一致性來(lái)保證數(shù)據(jù)的最終一致。為了更好地實(shí)現(xiàn)數(shù)據(jù)的最終一致性,系統(tǒng)架構(gòu)在設(shè)計(jì)上多采用消息組件來(lái)實(shí)現(xiàn),在滿足了系統(tǒng)解耦的同時(shí),依靠消息中間件的高可用也保證了數(shù)據(jù)不丟失,并且消息中間件的有序消費(fèi)能夠進(jìn)一步保證數(shù)據(jù)的一致性。
雖然消息中間件在數(shù)據(jù)最終一致性架構(gòu)中擔(dān)任了不可或缺的地位,但其最終也只是為了更好地適應(yīng)架構(gòu),并不能完全解決數(shù)據(jù)一致性問(wèn)題。因此,在此基礎(chǔ)上,在通過(guò)數(shù)據(jù)同步的過(guò)程中,添加更多機(jī)制如重復(fù)嘗試與手工同步操作,更好地利用線上、線下兩種方式,來(lái)實(shí)現(xiàn)達(dá)到最終的數(shù)據(jù)一致性。
3.2 安全防護(hù)
3.2.1 多因子認(rèn)證元素的充分運(yùn)用,確保用戶憑證信息安全
用戶的身份驗(yàn)證環(huán)節(jié)所有業(yè)務(wù)應(yīng)用都與統(tǒng)一權(quán)限平臺(tái)進(jìn)行集成,業(yè)務(wù)應(yīng)用只需要接入統(tǒng)一認(rèn)證,后續(xù)的登錄過(guò)程是基于統(tǒng)一門戶認(rèn)證成功之后,進(jìn)行授權(quán)碼申請(qǐng)、登錄票據(jù)的簽發(fā),并再傳輸用戶驗(yàn)證信息。而統(tǒng)一權(quán)限主要多因子與國(guó)密等方式實(shí)現(xiàn)登錄認(rèn)證過(guò)程,具有較高的安全性。
3.2.2 在級(jí)聯(lián)認(rèn)證中融合OAuth2.0認(rèn)證機(jī)制
通過(guò)授權(quán)碼的申請(qǐng),授權(quán)碼與當(dāng)前登錄身份信息進(jìn)行綁定,讓認(rèn)證過(guò)程形成完整閉環(huán)。統(tǒng)一權(quán)限平臺(tái)通過(guò)兩級(jí)認(rèn)證的互信機(jī)制對(duì)授權(quán)碼進(jìn)行核實(shí),確認(rèn)授權(quán)碼有效才可進(jìn)入后續(xù)步驟,各個(gè)要素環(huán)環(huán)相扣,形成閉環(huán)。
3.2.3 級(jí)聯(lián)認(rèn)證的準(zhǔn)入與身份核查雙重校驗(yàn)
在兩級(jí)認(rèn)證服務(wù)的架構(gòu)設(shè)計(jì)中,引入自身服務(wù)之間的互信機(jī)制。在省市公司的統(tǒng)一權(quán)限的中注冊(cè)一級(jí)統(tǒng)一權(quán)限的服務(wù)地址,同時(shí)導(dǎo)入互信的證書。通信過(guò)程中基于互信證書采用HTTPS 協(xié)議進(jìn)行通信。
在國(guó)網(wǎng)總部的統(tǒng)一權(quán)限擁有企業(yè)的權(quán)威身份數(shù)據(jù),維護(hù)了全國(guó)網(wǎng)的數(shù)據(jù),網(wǎng)省公司統(tǒng)一權(quán)限頒發(fā)票據(jù)前需要驗(yàn)證當(dāng)前系統(tǒng)的合法性,同時(shí)校驗(yàn)身份信息是否完整,同時(shí)頒發(fā)的票據(jù)為短時(shí)間一次有效,避免黑客在網(wǎng)絡(luò)截包之后,利用原有請(qǐng)求發(fā)起攻擊,引入防重放機(jī)制,避免黑客的重復(fù)攻擊??偛拷y(tǒng)一權(quán)限在獲取到授權(quán)碼去驗(yàn)證時(shí),攜帶自身身份信息,網(wǎng)省在驗(yàn)證身份信息之后,再進(jìn)行下一步授權(quán)碼驗(yàn)證,實(shí)現(xiàn)身份的雙重驗(yàn)證,提升級(jí)聯(lián)認(rèn)證的安全性。
4 結(jié)語(yǔ)
本文所述方案與級(jí)聯(lián)認(rèn)證在國(guó)網(wǎng)實(shí)際項(xiàng)目中的應(yīng)用情況基于OAuth2.0 協(xié)議,實(shí)現(xiàn)了級(jí)聯(lián)認(rèn)證流程閉環(huán);通過(guò)身份的級(jí)聯(lián)編碼貫通數(shù)據(jù)的一致性,通過(guò)認(rèn)證服務(wù)自身的互信機(jī)制與證書,規(guī)避了級(jí)聯(lián)數(shù)據(jù)被篡改風(fēng)險(xiǎn)??傮w在確保級(jí)聯(lián)認(rèn)證流程的安全基礎(chǔ)上,實(shí)現(xiàn)了用戶無(wú)感知的訪問(wèn)統(tǒng)一部署應(yīng)用與多級(jí)部署應(yīng)用。目前,該企業(yè)級(jí)聯(lián)認(rèn)證設(shè)計(jì)方案已在國(guó)網(wǎng)公司上線應(yīng)用,支撐了全網(wǎng)多套企業(yè)級(jí)信息化應(yīng)用的級(jí)聯(lián)登錄認(rèn)證,運(yùn)行情況良好。