周游舟
(1.重慶城市職業(yè)學(xué)院信息與智能工程系, 重慶 402160; 2.永川智能制造公共實(shí)訓(xùn)中心, 重慶 402160)
隨著信息技術(shù)的飛速發(fā)展,各企事業(yè)單位出現(xiàn)了許多不同的業(yè)務(wù)應(yīng)用系統(tǒng),如何在保證安全的前提下方便、快捷地管理用戶和認(rèn)證用戶成為各單位信息化建設(shè)首要考慮的問題.采用單點(diǎn)登錄機(jī)制,建立統(tǒng)一認(rèn)證平臺(tái)成為各單位解決統(tǒng)一授權(quán)、統(tǒng)一調(diào)度的常用方式.但是,統(tǒng)一授權(quán)、統(tǒng)一調(diào)度給用戶登錄帶來便利的同時(shí),也給企業(yè)的信息化建設(shè)帶來了很大的維護(hù)工作量,很多單位不得不安排專人進(jìn)行信息系統(tǒng)權(quán)限的維護(hù),而且在權(quán)限的維護(hù)過程中還可能造成業(yè)務(wù)流程的臨時(shí)中斷,給員工轉(zhuǎn)崗、調(diào)崗、離職等情況下的工作交接造成了很大麻煩.
目前國內(nèi)外學(xué)者對(duì)統(tǒng)一認(rèn)證平臺(tái)的研究,主要集中在如何使用單點(diǎn)登錄技術(shù)解決使用中的安全性和方便性問題、如何用管理制度解決員工之間的工作交接問題上,對(duì)如何用信息技術(shù)解決統(tǒng)一認(rèn)證平臺(tái)帶來的業(yè)務(wù)管理問題研究較少.本研究對(duì)統(tǒng)一認(rèn)證平臺(tái)在實(shí)際應(yīng)用中造成的維護(hù)工作量大的問題,針對(duì)不同應(yīng)用場景設(shè)計(jì)出一種基于交接碼的統(tǒng)一認(rèn)證用戶綁定模式,解決了統(tǒng)一認(rèn)證平臺(tái)中的用戶工作交接問題.本設(shè)計(jì)在減輕統(tǒng)一認(rèn)證平臺(tái)維護(hù)的工作量的同時(shí),提升了業(yè)務(wù)系統(tǒng)的安全性和相關(guān)流程連續(xù)性,具有較強(qiáng)的應(yīng)用推廣前景.
依托云計(jì)算、物聯(lián)網(wǎng)與大數(shù)據(jù)等成熟技術(shù)體系,利用重慶市經(jīng)信委內(nèi)、重慶市內(nèi)信息平臺(tái)建設(shè)成果,解決現(xiàn)有業(yè)務(wù)系統(tǒng)體系窗口分散、內(nèi)容支離、數(shù)據(jù)異構(gòu)、環(huán)境獨(dú)立和決策乏力等局限,實(shí)現(xiàn)流程統(tǒng)一規(guī)范、資源充分共享、業(yè)務(wù)有效協(xié)同、支撐分析能力強(qiáng)大的平臺(tái),是重慶市經(jīng)濟(jì)和信息化大數(shù)據(jù)應(yīng)用平臺(tái)(以下簡稱大數(shù)據(jù)平臺(tái))建設(shè)的初衷.然而,在統(tǒng)一認(rèn)證平臺(tái)實(shí)施之前,各機(jī)構(gòu)、各職能部門已經(jīng)存在相關(guān)業(yè)務(wù)系統(tǒng);統(tǒng)一認(rèn)證平臺(tái)解決了各業(yè)務(wù)系統(tǒng)的多賬號(hào)、多密碼、多入口、安全審計(jì)等問題,同時(shí)也給各業(yè)務(wù)系統(tǒng)的正常運(yùn)轉(zhuǎn)帶來了一定的困擾,主要體現(xiàn)在下面幾個(gè)方面:
1)相對(duì)獨(dú)立的用戶權(quán)限及各自維護(hù)的系統(tǒng)管理人員.在大數(shù)據(jù)平臺(tái)下,存在著幾十個(gè)子平臺(tái)和子系統(tǒng),如智慧園區(qū)、智能制造、中小企業(yè)月報(bào)、產(chǎn)業(yè)技術(shù)創(chuàng)新等企業(yè)服務(wù)平臺(tái)和專家評(píng)審、OA等內(nèi)部辦公系統(tǒng),同時(shí)各系統(tǒng)平臺(tái)都擁有各自一套相對(duì)獨(dú)立的賬號(hào)、權(quán)限體系,基本上由各信息系統(tǒng)的承建商自行設(shè)計(jì)與各系統(tǒng)管理員獨(dú)立維護(hù),統(tǒng)一改造賬號(hào)權(quán)限體系的難度較大.
2)存在大量的老舊賬號(hào)和新增注冊賬號(hào).大數(shù)據(jù)平臺(tái)下的中小企業(yè)公共服務(wù)平臺(tái)、中小企業(yè)月報(bào)、智能制造平臺(tái)等企業(yè)服務(wù)平臺(tái),已運(yùn)行多年、積累大量信息不全的老舊賬號(hào),同時(shí)也有大量的新增注冊賬號(hào),給賬號(hào)的梳理和維護(hù)帶來一定的困難.
3)企業(yè)賬號(hào)信息變更頻繁.因企業(yè)的賬號(hào)信息與企業(yè)的生產(chǎn)經(jīng)營相關(guān),存在著一定量的人員流動(dòng)和崗位調(diào)整,企業(yè)賬號(hào)的聯(lián)系人、聯(lián)系電話、及聯(lián)系郵箱經(jīng)常變更成為事實(shí),相應(yīng)各業(yè)務(wù)系統(tǒng)的賬號(hào)密碼忘記成為常態(tài).
4)管理部門組織架構(gòu)及崗位人員調(diào)整.重慶市經(jīng)濟(jì)和信息化委員會(huì)下屬機(jī)構(gòu)及人員調(diào)整,導(dǎo)致各業(yè)務(wù)系統(tǒng)的賬號(hào)調(diào)整困難.例如,崗位分工調(diào)整,過去由小王負(fù)責(zé)的A系統(tǒng)流程審批,現(xiàn)在交由小張負(fù)責(zé),小王的其他工作不變動(dòng),小張繼續(xù)完成小王的審批工作.
總之,伴隨著各業(yè)務(wù)系統(tǒng)的需求變更以及各單位對(duì)用戶管理需求的不斷增長,一方面加重了各系統(tǒng)管理員的工作負(fù)擔(dān),另一方面也加大了各業(yè)務(wù)系統(tǒng)的對(duì)接難度.由此,需要盡快實(shí)現(xiàn)一個(gè)相對(duì)獨(dú)立、安全高效、方便集成的解決方案.
本文中主要研究的是新舊系統(tǒng)接入統(tǒng)一認(rèn)證平臺(tái)的改造設(shè)計(jì),對(duì)于新建業(yè)務(wù)系統(tǒng)來說,接入統(tǒng)一認(rèn)證平臺(tái)方式比較多,而且所用技術(shù)也相對(duì)成熟,本文中不單獨(dú)說明.在老舊系統(tǒng)準(zhǔn)備接入統(tǒng)一認(rèn)證平臺(tái)認(rèn)證時(shí),因系統(tǒng)已經(jīng)穩(wěn)定運(yùn)行多時(shí),存在很多重要的用戶關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù),而且個(gè)別老舊業(yè)務(wù)系統(tǒng)沒有完善的文檔,導(dǎo)致技術(shù)人員無法入手改造,更談不上改造原有業(yè)務(wù)系統(tǒng)的認(rèn)證方式.針對(duì)這樣的情況,采用盡量不改變原有業(yè)務(wù)的情況下,設(shè)計(jì)出一種相對(duì)通用的統(tǒng)一認(rèn)證接入方式來解決新舊系統(tǒng)的接入綁定問題.
本設(shè)計(jì)的原則是在不改變統(tǒng)一認(rèn)證平臺(tái)獨(dú)立性的基礎(chǔ)上,采用中央認(rèn)證服務(wù)(central authentication service,CAS)的方式單點(diǎn)登錄到各業(yè)務(wù)系統(tǒng).并通過不改變各業(yè)務(wù)系統(tǒng)的原有的權(quán)限管理體系,保證各業(yè)務(wù)系統(tǒng)能獨(dú)立運(yùn)行的基礎(chǔ)上,平穩(wěn)過渡到統(tǒng)一認(rèn)證平臺(tái)體系中.也就是說重新設(shè)計(jì)開發(fā)統(tǒng)一認(rèn)證對(duì)接功能模塊,通過業(yè)務(wù)系統(tǒng)登錄入口和單點(diǎn)登錄入口并存的方式,逐步過渡到統(tǒng)一認(rèn)證平臺(tái)的單入口模式下.對(duì)接功能模塊總體設(shè)計(jì)流程如圖1所示.
圖1 總體設(shè)計(jì)流程圖
從圖1中可以看出,業(yè)務(wù)系統(tǒng)對(duì)接統(tǒng)一認(rèn)證平臺(tái),主要是通過業(yè)務(wù)系統(tǒng)賬號(hào)綁定統(tǒng)一認(rèn)證平臺(tái)賬號(hào)實(shí)現(xiàn)對(duì)接,主要流程步驟有以下幾點(diǎn):
1)用戶登錄統(tǒng)一認(rèn)證平臺(tái).
用戶如果沒有統(tǒng)一認(rèn)證平臺(tái)賬號(hào),則先進(jìn)行統(tǒng)一認(rèn)證平臺(tái)賬號(hào)的注冊和相應(yīng)業(yè)務(wù)系統(tǒng)的開通申請;通過審批后,用戶就可以通過證書登錄、賬號(hào)密碼登錄和短信驗(yàn)證碼登錄3種方式進(jìn)行統(tǒng)一認(rèn)證平臺(tái)的登錄驗(yàn)證.
2)單點(diǎn)登錄過程驗(yàn)證.
平臺(tái)管理員提前將業(yè)務(wù)系統(tǒng)名稱、URL、IP等業(yè)務(wù)系統(tǒng)參數(shù)配置到統(tǒng)一認(rèn)證平臺(tái)中,當(dāng)用戶發(fā)起單點(diǎn)登錄請求通過驗(yàn)證后,業(yè)務(wù)系統(tǒng)通過CAS獲取統(tǒng)一認(rèn)證平臺(tái)賬號(hào)信息,然后根據(jù)平臺(tái)賬號(hào)信息與綁定業(yè)務(wù)系統(tǒng)賬號(hào)信息進(jìn)行匹配,如果匹配上則跳轉(zhuǎn)并登錄到業(yè)務(wù)系統(tǒng)中,否則跳轉(zhuǎn)到綁定業(yè)務(wù)系統(tǒng)賬號(hào)頁面.
3)綁定業(yè)務(wù)系統(tǒng)方式選擇.
如果業(yè)務(wù)系統(tǒng)允許用戶進(jìn)行賬號(hào)的注冊,則顯示新用戶注冊選項(xiàng),否則用戶只能通過老用戶和交接用戶的方式進(jìn)行業(yè)務(wù)系統(tǒng)賬號(hào)的綁定.如果業(yè)務(wù)系統(tǒng)未開通新用戶注冊,并且該用戶又是新用戶,則只能先聯(lián)系業(yè)務(wù)系統(tǒng)管理員獲得業(yè)務(wù)系統(tǒng)的登錄賬號(hào)和密碼,再通過老用戶綁定的方式進(jìn)行用戶綁定.
4)產(chǎn)生業(yè)務(wù)系統(tǒng)用戶交接碼.
當(dāng)用戶通過單點(diǎn)登錄方式進(jìn)入到業(yè)務(wù)系統(tǒng)后,用戶可以在業(yè)務(wù)系統(tǒng)中生成具有有效期的用戶交接碼,一旦用戶交接碼被平臺(tái)其他賬戶成功綁定,則該用戶失去業(yè)務(wù)系統(tǒng)權(quán)限,需要再次綁定才能通過單點(diǎn)登錄的方式進(jìn)入該業(yè)務(wù)系統(tǒng).
5)業(yè)務(wù)接收方綁定業(yè)務(wù)系統(tǒng).
工作交接時(shí),接收方通過統(tǒng)一認(rèn)證平臺(tái)進(jìn)入業(yè)務(wù)系統(tǒng)時(shí),需要選擇“交接用戶”選項(xiàng)進(jìn)行交接碼的錄入,當(dāng)輸入的交接碼通過業(yè)務(wù)系統(tǒng)驗(yàn)證后,會(huì)顯示交出方的信息和綁定用戶按鈕.只有接收方用戶在交接碼有效期內(nèi)確定綁定用戶,業(yè)務(wù)交接雙方才能完成業(yè)務(wù)系統(tǒng)的交接.
常規(guī)情況下,一個(gè)統(tǒng)一認(rèn)證平臺(tái)賬號(hào)可以綁定多個(gè)業(yè)務(wù)系統(tǒng),而每個(gè)業(yè)務(wù)系統(tǒng)賬號(hào)只允許被一個(gè)統(tǒng)一認(rèn)證平臺(tái)賬號(hào)綁定.特殊情況下,業(yè)務(wù)系統(tǒng)也可以開放一個(gè)業(yè)務(wù)系統(tǒng)賬號(hào)被多個(gè)統(tǒng)一認(rèn)證平臺(tái)賬號(hào)綁定的功能.
統(tǒng)一認(rèn)證平臺(tái)跳轉(zhuǎn)到綁定業(yè)務(wù)系統(tǒng)用戶界面的時(shí)候有3種用戶類型選擇,如圖2所示.其中“我是老用戶”,可以通過原有業(yè)務(wù)系統(tǒng)的用戶名和密碼進(jìn)行用戶綁定認(rèn)證.“我是新用戶”通過模擬原有業(yè)務(wù)系統(tǒng)的用戶注冊過程,然后再通過注冊過程中設(shè)定的用戶名和密碼再進(jìn)行自動(dòng)綁定和認(rèn)證登錄.而“我是交接用戶”則需要解決交接雙方信息互通及安全方面的問題,所以交接用戶功能需要單獨(dú)設(shè)計(jì).也就是說系統(tǒng)設(shè)計(jì)分為兩大部分,一部分解決平臺(tái)用戶綁定業(yè)務(wù)系統(tǒng)用戶的問題,另外一部分解決用戶交接的問題.
圖2 綁定用戶類型選擇
3.1 綁定用戶設(shè)計(jì)通過單點(diǎn)登錄方式從統(tǒng)一認(rèn)證平臺(tái)跳轉(zhuǎn)到業(yè)務(wù)系統(tǒng)時(shí),如果統(tǒng)一認(rèn)證平臺(tái)綁定了業(yè)務(wù)系統(tǒng)賬號(hào),則通過特定的自動(dòng)登錄方式進(jìn)入業(yè)務(wù)系統(tǒng),否則需要在業(yè)務(wù)系統(tǒng)中對(duì)統(tǒng)一認(rèn)證平臺(tái)賬號(hào)進(jìn)行業(yè)務(wù)系統(tǒng)賬號(hào)的綁定.
在已綁定業(yè)務(wù)系統(tǒng)賬戶的情況,可以通過統(tǒng)一認(rèn)證平臺(tái)唯一ID標(biāo)識(shí)找到綁定業(yè)務(wù)系統(tǒng)的用戶登錄賬號(hào)等用戶信息,并進(jìn)行業(yè)務(wù)系統(tǒng)的自動(dòng)登錄操作.但是在沒有綁定業(yè)務(wù)系統(tǒng)賬號(hào)的情況下,則需要考慮用戶注冊、賬號(hào)綁定等過程的停留時(shí)間和操作方式是否正常,以及單點(diǎn)登錄跳轉(zhuǎn)頁面是否與綁定確認(rèn)頁面是同一個(gè)客戶端來源等信息安全問題.針對(duì)以上情況的考慮,本設(shè)計(jì)通過系統(tǒng)端后臺(tái)讀取客戶端信息結(jié)合數(shù)據(jù)庫記錄過程信息進(jìn)行用戶驗(yàn)證,如表1所示.
表1 綁定用戶核心字段
從表1可以看出綁定用戶表除了主鍵ID之外,主要分為統(tǒng)一認(rèn)證平臺(tái)信息、業(yè)務(wù)系統(tǒng)賬戶信息和綁定操作過程3部分內(nèi)容.第一部分,統(tǒng)一認(rèn)證平臺(tái)信息部分主要有:sso_key是統(tǒng)一認(rèn)證平臺(tái)的賬號(hào)唯一標(biāo)識(shí),sso_token是統(tǒng)一認(rèn)證平臺(tái)進(jìn)行單點(diǎn)登錄的唯一標(biāo)識(shí),以及本設(shè)計(jì)表1中未全部列出的其他用戶信息,包括用戶的姓名、性別、部門、頭像、聯(lián)系方式等.第二部分,業(yè)務(wù)系統(tǒng)賬號(hào)信息部分主要有:user_id是業(yè)務(wù)系統(tǒng)賬戶的唯一標(biāo)識(shí),user_login_name業(yè)務(wù)系統(tǒng)的用戶登錄賬號(hào),user_login_password是用戶注冊時(shí)設(shè)定的用戶密碼或用戶綁定賬號(hào)時(shí)候進(jìn)行驗(yàn)證的用戶密碼.其中,user_login_password根據(jù)不同的業(yè)務(wù)系統(tǒng)需要進(jìn)行不同的處理,如果業(yè)務(wù)系統(tǒng)可以進(jìn)行用戶登錄改造,則就不需要記錄用戶密碼;同樣,如果業(yè)務(wù)系統(tǒng)不能進(jìn)行改造,則要對(duì)用戶密碼進(jìn)行加密保存,然后在后期改造單點(diǎn)登錄的時(shí)候可以采取模擬用戶登錄方式進(jìn)行用戶登錄.第三部分,用戶綁定操作過程,為了保障用戶的綁定過程盡可能安全可靠,綁定過程除了在系統(tǒng)后端進(jìn)行客戶端驗(yàn)證之外,同時(shí)記錄了用戶綁定過程的兩個(gè)核心時(shí)間點(diǎn),sso_time是統(tǒng)一認(rèn)證平臺(tái)跳轉(zhuǎn)到業(yè)務(wù)系統(tǒng)時(shí)的時(shí)間點(diǎn),bind_time是用戶完成注冊(或者完成綁定操作)的時(shí)間點(diǎn),后臺(tái)通過一定算法對(duì)這兩個(gè)時(shí)間點(diǎn)的合理性進(jìn)行判斷,如果判定綁定合法則設(shè)置綁定完成標(biāo)志為成功狀態(tài),否則記錄用戶綁定失敗.
3.2 用戶交接設(shè)計(jì)在解決用戶交接問題時(shí),本團(tuán)隊(duì)嘗試過“短信驗(yàn)證交接”“郵箱驗(yàn)證交接”等方式,但最終都被客戶提出的各種問題否定,最后一致選定基于交接碼的業(yè)務(wù)交接方式.在用戶交接時(shí),需要解決以下幾個(gè)方面的問題.第一,原有業(yè)務(wù)系統(tǒng)的登錄,因?yàn)殚L期通過統(tǒng)一認(rèn)證平臺(tái)的單點(diǎn)登錄方式進(jìn)行驗(yàn)證,已經(jīng)忘記業(yè)務(wù)系統(tǒng)的用戶名和密碼;第二,原有業(yè)務(wù)系統(tǒng)所保存的用戶資料可能與實(shí)際用戶不一致;第三,梳理原有用戶所具有的業(yè)務(wù)系統(tǒng)權(quán)限可能存在遺漏;第四,交接過程中需保證原有業(yè)務(wù)系統(tǒng)所辦業(yè)務(wù)不被中斷;第五,原有業(yè)務(wù)系統(tǒng)交接完成后,不再擁有登錄權(quán)限;第六,業(yè)務(wù)系統(tǒng)交接給新用戶后,新用戶也有可能再交接給其他用戶.
用戶交接過程主要由產(chǎn)生交接碼、綁定交接碼和用戶識(shí)別3部分組成,在這過程所產(chǎn)生的主要數(shù)據(jù)交互如表2所示.
表2 用戶交接核心字段
1)生成交接碼.
為了驗(yàn)證用戶交接的真實(shí)性和安全性,本設(shè)計(jì)采用交接碼由業(yè)務(wù)系統(tǒng)生成和驗(yàn)證.用戶通過統(tǒng)一認(rèn)證平臺(tái)(或者原有業(yè)務(wù)系統(tǒng)的賬號(hào)、密碼)登錄業(yè)務(wù)系統(tǒng)之后,在用戶信息位置可以清楚地看到“用戶交接”按鈕.只要用戶點(diǎn)擊“用戶交接”按鈕,則進(jìn)入用戶交接碼生成頁面,可以直接看到生成的“交接碼”和注意事項(xiàng).同時(shí)在用戶進(jìn)行交接時(shí),業(yè)務(wù)系統(tǒng)通過統(tǒng)一認(rèn)證平臺(tái)向交接雙方用戶發(fā)送短信提醒,防止賬號(hào)被盜等非正常渠道進(jìn)行用戶交接.
如“表2 用戶交接核心字段”所示,每個(gè)統(tǒng)一認(rèn)證賬戶對(duì)應(yīng)的業(yè)務(wù)系統(tǒng)用戶同一時(shí)間只產(chǎn)生一條用戶交接信息.主要有現(xiàn)有統(tǒng)一認(rèn)證賬戶信息,包括old_sso_account、old_sso_key、old_sso_name、old_sso_time、status、sso_id、authcode等.其中,authcode是由一定算法產(chǎn)生的唯一交接碼,并且與authcode_time(產(chǎn)生交接碼的時(shí)間)有關(guān).
2)綁定交接碼.
當(dāng)接收業(yè)務(wù)用戶從統(tǒng)一認(rèn)證平臺(tái)進(jìn)入業(yè)務(wù)系統(tǒng)后,首先業(yè)務(wù)系統(tǒng)會(huì)跳轉(zhuǎn)到用戶綁定頁面,選擇“我是交接用戶”進(jìn)入交接綁定頁面.當(dāng)接收業(yè)務(wù)用戶輸入原用戶提供的交接碼時(shí),前端頁面會(huì)進(jìn)行簡單規(guī)則的驗(yàn)證;當(dāng)接收業(yè)務(wù)用戶點(diǎn)擊“確定”交接業(yè)務(wù)時(shí),業(yè)務(wù)系統(tǒng)后臺(tái)會(huì)根據(jù)交接碼找到產(chǎn)生交接碼的信息并進(jìn)行特定規(guī)則的驗(yàn)證.主要讀取old_sso_time、status、sso_id、authcode_time等信息進(jìn)行驗(yàn)證,包括幾個(gè)時(shí)間點(diǎn)產(chǎn)生間隔的合理性驗(yàn)證、驗(yàn)證碼的正確性和完整性驗(yàn)證、通知信息的發(fā)送驗(yàn)證等.一旦驗(yàn)證成功,系統(tǒng)會(huì)更改原業(yè)務(wù)系統(tǒng)用戶在表1中的綁定信息,并新建一條綁定信息,同時(shí)完善表2的信息和短信通知交接雙方用戶.
3.3 安全設(shè)計(jì)為了解決既要操作簡單又要安全可控,保障用戶交接過程是由交接雙方本人操作(或者本人授權(quán)操作)的問題,本設(shè)計(jì)從以下幾個(gè)方面來進(jìn)行用戶安全控制.
1)從登陸入口控制.
包括統(tǒng)一認(rèn)證平臺(tái)在內(nèi)的客戶端都采用CA認(rèn)證方式,統(tǒng)一認(rèn)證平臺(tái)根據(jù)用戶登錄網(wǎng)絡(luò)和設(shè)備進(jìn)行判斷,如果用戶在辦公區(qū)的常用計(jì)算機(jī)上進(jìn)行操作,則啟用普通的賬號(hào)、密碼驗(yàn)證,否則系統(tǒng)根據(jù)安全風(fēng)險(xiǎn)等級(jí)啟用短信驗(yàn)證和USB Key認(rèn)證.
2)從權(quán)限分配上進(jìn)行控制.
統(tǒng)一認(rèn)證平臺(tái)除進(jìn)行登陸驗(yàn)證之外,還要進(jìn)行用戶平臺(tái)的分配控制,只有當(dāng)用戶有該業(yè)務(wù)系統(tǒng)的權(quán)限,才會(huì)生成唯一的單點(diǎn)登錄鏈接.
3)系統(tǒng)之間進(jìn)行驗(yàn)證.
統(tǒng)一認(rèn)證平臺(tái)一方面要驗(yàn)證業(yè)務(wù)系統(tǒng)的請求是否來源于配置的服務(wù)器,同時(shí)業(yè)務(wù)系統(tǒng)也會(huì)驗(yàn)證請求是否來源于統(tǒng)一認(rèn)證平臺(tái),并且驗(yàn)證過程中涉及的重要驗(yàn)證信息還需要從系統(tǒng)后臺(tái)的接口進(jìn)行再次確認(rèn).
4)操作過程合理性驗(yàn)證.
在用戶單點(diǎn)登錄過程中,業(yè)務(wù)系統(tǒng)會(huì)記錄用戶每一次的操作時(shí)間和瀏覽器地址等過程信息,然后后臺(tái)會(huì)進(jìn)行綜合計(jì)算用戶的停留時(shí)間和操作過程是否與實(shí)際匹配,如果不匹配則提示操作失敗信息,并記錄日志用于事后定期分析.
4.1 業(yè)務(wù)系統(tǒng)關(guān)鍵參數(shù)配置
1)統(tǒng)一認(rèn)證平臺(tái)參數(shù)配置
sso:
#回調(diào)統(tǒng)一認(rèn)證平臺(tái)退出地址
ssoOutAddress: https://127.0.0.1∶8323/netcasso/api/logout
#回調(diào)統(tǒng)一認(rèn)證平臺(tái)獲取信息根地址
ssoInerAddress: https://127.0.0.1∶8323/netcasso
#業(yè)務(wù)系統(tǒng)標(biāo)識(shí)
clientId: HRMS
2)注冊綁定交接關(guān)鍵過程過程參數(shù)設(shè)置.
public static final String HTTP_URL_USER="/oauth2/userInfo"; // 統(tǒng)一認(rèn)證平臺(tái)用戶信息相對(duì)地址
public static final String HTTP_URL_AUTH="/oauth2/authorize"; // 統(tǒng)一認(rèn)證平臺(tái)用戶授權(quán)相對(duì)地址
public static final String ACCESS_TOKEN=“access_token”; // 統(tǒng)一認(rèn)證平臺(tái)token標(biāo)識(shí)
public static final String SSO_REGISTER=“register”; // 綁定注冊交接頁面控制器
public static final String BIND_URL="/register/bind"; // 綁定注冊交接頁面參數(shù)的一致性判斷
public static final String SSO_OUT_KEY=“l(fā)ogout”; // 退出參數(shù)的一致性判斷
public static final String SSO_OUT_URL="/hrms/login?action=logout"; // 前端頁面退出標(biāo)識(shí)
......
4.2 過濾器關(guān)鍵程序?qū)崿F(xiàn)過程
// 對(duì)特定頁面放行
StringBuffer redirectUri=httpServletRequest.getRequestURL();
if (redirectUri.indexOf(SSOConstants.SSO_REGISTER) > 1) {
return true; // 對(duì)綁定注冊交接頁面放行
}
......
// 判斷當(dāng)前用戶是否登錄,登錄返回true, 否則判斷access_token參數(shù),并進(jìn)行登錄.
Subject subject=this.getSubject(request, response);
Principal, ?> principal=(Principal) subject.getPrincipal();
if (principal !=null && subject.isAuthenticated()) {
return true; // 對(duì)重復(fù)點(diǎn)擊單點(diǎn)登錄(已經(jīng)登錄業(yè)務(wù)系統(tǒng))用戶放行
}
......
// 根據(jù)用戶唯一標(biāo)識(shí)判斷用戶是否綁定,若沒有綁定,則進(jìn)行綁定初始化并跳轉(zhuǎn)到綁定注冊交接頁面;否則自動(dòng)登錄并跳轉(zhuǎn)業(yè)務(wù)系統(tǒng)首頁.
User user=userService.getUserBySsoId(accountId);
if (user==null) {
UserSso csSSo=userService.initBind(json1, accountId, accessToken);
if (csSSo !=null) { //為了用戶綁定安全,設(shè)置用戶綁定動(dòng)態(tài)參數(shù)
request.setAttribute(SSOConstants.SSO_BIND_KEY, csSSo.getSsoKey());
request.setAttribute(SSOConstants.SSO_BIND_ID, csSSo.getId());
return false; //設(shè)定請求參數(shù)標(biāo)識(shí)后,再通過onAccessDenied方法跳轉(zhuǎn)到指定地址
}
} else {
autoLogin(request, user.getUsername(), accessToken); //自動(dòng)登錄并跳轉(zhuǎn)業(yè)務(wù)系統(tǒng)首頁
return true; // 放行合法單點(diǎn)登錄
}
......
4.3 用戶交接關(guān)鍵程序?qū)崿F(xiàn)過程
// 綁定是否有效判斷
csSSo=this.getOne(bindId);
if (csSSo==null) {
return false; // 沒有進(jìn)行綁定初始化操作,返回失敗
}
long nowSecond=new Date().getTime();
long ssoInitSecond=csSSo.getSsoTime().getTime();
long hour=(nowSecond - ssoInitSecond) / 1000 / 60 / 60;
if (hour >=UserService.BIND_OVER_TIME) {
return false; // 綁定過程超過正常操作時(shí)間,返回失敗
}
if (csSSo.getBindOver()) {
return false; // 防止惡意操作,綁定過程必須按照程序設(shè)計(jì)步驟進(jìn)行,否則返回失敗
}
......
// 生成一個(gè)不重復(fù)的交接碼
String authcode=null;
while (true) {
authcode=RandomStringUtils.randomAlphanumeric(10);
Where where=new Where();
where.addQl("authcode=:authcode").addParams(“authcode”, authcode);
List
if (null==ebdsMessageList || 0==ebdsMessageList.size()) {
return authcode;
}
}
......
// 交接超時(shí)判斷
Date date=new Date();
date.setTime(date.getTime() - UserChangeService.OUTTIME * 1000 * 60);
return userChange.getCreateTime().getTime() < date.getTime();
......
絕大多數(shù)統(tǒng)一認(rèn)證平臺(tái)雖然解決了單點(diǎn)登錄問題,但是針對(duì)用戶崗位更換、分管業(yè)務(wù)更換等問題后期維護(hù)比較復(fù)雜,往往需要業(yè)務(wù)系統(tǒng)及統(tǒng)一認(rèn)證平臺(tái)管理員協(xié)助處理.針對(duì)這種情況,本研究分析了統(tǒng)一認(rèn)證平臺(tái)中用戶工作交接情況的解決辦法,提出了基于交接碼的統(tǒng)一認(rèn)證綁定設(shè)計(jì)方案,實(shí)現(xiàn)了在統(tǒng)一認(rèn)證平臺(tái)下的業(yè)務(wù)系統(tǒng)內(nèi)的用戶自主綁定及工作交接控制設(shè)計(jì),并將該設(shè)計(jì)在重慶市經(jīng)濟(jì)和信息化大數(shù)據(jù)應(yīng)用平臺(tái)、智慧車輛檢測平臺(tái)等系統(tǒng)平臺(tái)中進(jìn)行實(shí)際應(yīng)用.1年多的實(shí)際應(yīng)用表明確實(shí)解決了統(tǒng)一認(rèn)證平臺(tái)下的工作交接繁瑣、后期維護(hù)工作量大等問題.該設(shè)計(jì)適用于各行業(yè)信息化集成,具有較廣的應(yīng)用前景.對(duì)于設(shè)計(jì)中的業(yè)務(wù)系統(tǒng)改造推廣等功能的完善是本研究的下一步工作.