李勝蘭 上海鐵路局金華車(chē)務(wù)段
基于單點(diǎn)登錄的鐵路WEB系統(tǒng)設(shè)計(jì)與分析
李勝蘭 上海鐵路局金華車(chē)務(wù)段
隨著鐵路內(nèi)部網(wǎng)上的web系統(tǒng)日益增多,為避免多次身份認(rèn)證,提出實(shí)現(xiàn)單點(diǎn)登錄的幾種解決方案。從安全性角度論證賬戶映射法為最佳方案,并舉例說(shuō)明實(shí)現(xiàn)單點(diǎn)登錄的處理流程設(shè)計(jì)。
單點(diǎn)登錄;賬戶映射;加密解密服務(wù);Web service
隨著企業(yè)信息化工作不斷推進(jìn),鐵路內(nèi)網(wǎng)中基于網(wǎng)頁(yè)的信息管理系統(tǒng)越來(lái)越多。各信息系統(tǒng)都有自己獨(dú)立的用戶認(rèn)證和權(quán)限維護(hù)模塊,登錄頁(yè)面需要重復(fù)開(kāi)發(fā),運(yùn)行時(shí)浪費(fèi)系統(tǒng)資源,賬戶管理維護(hù)也越來(lái)越繁瑣。此外,用戶也日漸形成“密碼疲勞癥”,要分別記住這么多系統(tǒng)的賬號(hào)和密碼,切換到另一個(gè)系統(tǒng)還得重新進(jìn)行身份認(rèn)證。
信息化發(fā)展到一定程度,系統(tǒng)集成化是必然趨勢(shì)。所以,從長(zhǎng)遠(yuǎn)角度考慮,新開(kāi)發(fā)的信息系統(tǒng)在架構(gòu)設(shè)計(jì)上應(yīng)考慮系統(tǒng)的集成特性。在系統(tǒng)集成的初級(jí)階段,先實(shí)現(xiàn)賬號(hào)和入口集成的單點(diǎn)登錄是最佳選擇。
單點(diǎn)登錄(SSO,Single Sign on)是一種方便用戶訪問(wèn)網(wǎng)絡(luò)的技術(shù)。用戶只需要在網(wǎng)絡(luò)中主動(dòng)地進(jìn)行一次身份認(rèn)證,就可以無(wú)縫訪問(wèn)其被授權(quán)使用的所有系統(tǒng)。
要實(shí)現(xiàn)單點(diǎn)登錄,一般有三種解決方案:
(1)集成設(shè)計(jì)法。將內(nèi)網(wǎng)所有WEB系統(tǒng)揉捏成一個(gè)獨(dú)立的大系統(tǒng)進(jìn)行設(shè)計(jì),整個(gè)系統(tǒng)只有一個(gè)登錄模塊和帳戶管理模塊,每個(gè)子系統(tǒng)都只是大系統(tǒng)中的一個(gè)功能模塊。
(2)帳戶映射法。選擇一個(gè)用戶功能較大較全的WEB系統(tǒng)作為門(mén)戶系統(tǒng),并在里面添加到其他WEB系統(tǒng)的鏈接。同時(shí),在其他WEB系統(tǒng)中建立相應(yīng)賬戶映射,通過(guò)比對(duì)獲取的用戶信息來(lái)判斷是否允許訪問(wèn)。
(3)安全網(wǎng)關(guān)法。它以統(tǒng)一身份認(rèn)證平臺(tái)為支撐,將企業(yè)的所有應(yīng)用系統(tǒng)部署在安全網(wǎng)關(guān)后面,通過(guò)適當(dāng)?shù)呐渲煤桶踩W(wǎng)關(guān),實(shí)現(xiàn)強(qiáng)身份認(rèn)證和單點(diǎn)登錄功能。此方案將所有的用戶認(rèn)證授權(quán)都交給第三方來(lái)代理,所有應(yīng)用系統(tǒng)的訪問(wèn)控制策略也由第三方來(lái)控制。
集成設(shè)計(jì)法對(duì)小企業(yè)的信息化改造比較適合,但像鐵路這種有一定信息化程度的大企業(yè),現(xiàn)有的多套系統(tǒng)已趨于成熟,重新再進(jìn)行集成設(shè)計(jì)開(kāi)發(fā)絕對(duì)不現(xiàn)實(shí);
賬戶映射法不需要推倒重來(lái),對(duì)已有系統(tǒng)的改造量也很小,實(shí)現(xiàn)起來(lái)更簡(jiǎn)單:首先,在門(mén)戶系統(tǒng)添加缺少的其他系統(tǒng)需要的用戶賬戶;然后,在其他應(yīng)用系統(tǒng)中增加一張門(mén)戶系統(tǒng)賬號(hào)到各自WEB系統(tǒng)賬號(hào)的映射表。
安全網(wǎng)關(guān)法適合對(duì)用戶授權(quán)高度集中的信息系統(tǒng)的集成,安全性最高。但鐵路內(nèi)部很多信息系統(tǒng)的用戶信息數(shù)據(jù)都是分級(jí)建庫(kù)的,要建立一個(gè)高度集中的第三方身份認(rèn)證、訪問(wèn)控制機(jī)制,不太可行。而且,對(duì)于基于車(chē)務(wù)段或小公司一級(jí)的組織結(jié)構(gòu)來(lái)說(shuō),部署起來(lái)有些大材小用。另外,安全網(wǎng)關(guān)法實(shí)現(xiàn)起來(lái)技術(shù)水平要求高,存在對(duì)已有系統(tǒng)的改造工作量和兼容問(wèn)題,還有對(duì)新系統(tǒng)的標(biāo)準(zhǔn)規(guī)范要求和接口問(wèn)題。
綜上所述,第二種方案即賬戶映射方法更加適合作為鐵路內(nèi)部WEB系統(tǒng)實(shí)現(xiàn)單點(diǎn)登錄的解決方案。以車(chē)務(wù)段為例,我們將OA系統(tǒng)作為門(mén)戶網(wǎng)站,在首頁(yè)添加其他WEB系統(tǒng)的鏈接,并在這些WEB系統(tǒng)中做賬戶映射,將OA系統(tǒng)的用戶解釋成WEB系統(tǒng)的用戶。這樣,用戶只要能成功登錄辦公網(wǎng)系統(tǒng),并被這些WEB系統(tǒng)授權(quán),就可以直接進(jìn)入這些WEB系統(tǒng),無(wú)需再次進(jìn)行登錄。
賬戶映射法實(shí)現(xiàn)起來(lái)不難,關(guān)鍵在于如何在各個(gè)WEB系統(tǒng)之間正確獲取用戶信息來(lái)進(jìn)行認(rèn)證。以下探討了獲取用戶信息的幾種方法。
當(dāng)用戶轉(zhuǎn)入另一個(gè)WEB系統(tǒng)時(shí),WEB系統(tǒng)通過(guò)傳過(guò)來(lái)的鏈接參數(shù)來(lái)獲取用戶信息。例如http://127.0.0.1/webpages/index.aspx?user=name1,其中name1就是用戶名。查找用戶映射表,如果name1對(duì)映的用戶名name2被授權(quán)就可訪問(wèn)相應(yīng)的頁(yè)面,而無(wú)需再次到登錄頁(yè)面進(jìn)行登錄,一切由系統(tǒng)自動(dòng)判斷。
但是,直接在鏈接中傳遞用戶名存在很大的安全問(wèn)題。未授權(quán)用戶很容易偽造鏈接來(lái)非法登錄WEB系統(tǒng)。因此,必須要對(duì)用戶信息進(jìn)行加密傳遞。有以下三種方案:
方案一,在門(mén)戶系統(tǒng)中加密然后傳遞給其他應(yīng)用系統(tǒng),如果門(mén)戶系統(tǒng)與要轉(zhuǎn)入的應(yīng)用系統(tǒng)的加解密算法不兼容,則會(huì)存在一個(gè)不能解密的問(wèn)題。這樣,用戶信息就不能還原,應(yīng)用系統(tǒng)就不能識(shí)別用戶,授權(quán)肯定失敗。
方案二,加密和解密都在一臺(tái)服務(wù)器上進(jìn)行。在這臺(tái)服務(wù)器上分別提供加密和解密的Web Services,分別供門(mén)戶系統(tǒng)用來(lái)加密用戶信息和要進(jìn)入的WEB系統(tǒng)解密傳遞來(lái)的用戶信息。這樣,就可以相對(duì)安全的傳遞用戶信息了。但是,防君子不防小人,一旦知道了密鑰和加解密算法也很容易破解。所以,我們打算采用非對(duì)稱的RSA算法,只在客戶端留下加密用的公匙,這樣理論上密文即使被截獲了也不可能破解出來(lái)的。MD5不行,它是不可逆的。
方案三,將要傳遞的用戶信息生成摘要,再與要登錄系統(tǒng)的所有用戶信息摘要(必須是同一方法)直接比對(duì)。相對(duì)來(lái)說(shuō),方案三的工作量要大很多,因此不予采納。
用戶訪問(wèn)一個(gè)網(wǎng)站時(shí)往往需要瀏覽許多網(wǎng)頁(yè),建立許多連接,用戶和服務(wù)器的通信是通過(guò)HTTP完成的,由于HTTP無(wú)狀態(tài)記憶的特點(diǎn),此次連接無(wú)法得到上次連接的狀態(tài)。因此,上次連接的合法化并不能保證下次連接也合法。
Session就是一個(gè)可以用來(lái)保存整個(gè)會(huì)話(包括從打開(kāi)瀏覽器連接到服務(wù)器的某個(gè)頁(yè)面,到關(guān)閉瀏覽器整個(gè)過(guò)程)的對(duì)象。因此,可以將各個(gè)連接要用到的全局變量存儲(chǔ)在Session中,如用戶信息。而Session ID則是由服務(wù)器分配用來(lái)標(biāo)識(shí)Session的。每個(gè)Session ID對(duì)應(yīng)一個(gè)Session對(duì)象。這樣,只要用戶不注銷,任何頁(yè)面都可以通過(guò)Session ID獲知當(dāng)前用戶身份。
這對(duì)于所有WEB系統(tǒng)都在同一臺(tái)應(yīng)用服務(wù)器上是可行的,但對(duì)于分布式的WEB系統(tǒng)以及分布在不同服務(wù)器上的各個(gè)WEB系統(tǒng)來(lái)說(shuō),就無(wú)法通過(guò)Session ID來(lái)傳遞用戶信息。因?yàn)椋總€(gè)Session ID只對(duì)應(yīng)自己服務(wù)器上的Session對(duì)象,而Session對(duì)象里的用戶信息是存儲(chǔ)在分配ID的服務(wù)器內(nèi)存中的。也就是說(shuō),通過(guò)程序傳遞過(guò)來(lái)的Session ID不可能在另一臺(tái)服務(wù)器內(nèi)存中找到相應(yīng)的用戶信息。我們的門(mén)戶WEB系統(tǒng)與其它WEB系統(tǒng)一般都分布在不同的服務(wù)器上,無(wú)法獲取用戶信息,也就無(wú)法對(duì)其進(jìn)行身份認(rèn)證。因此,不能僅僅傳遞Session ID,而必須傳遞Session中的用戶信息。
既然需要保存的是Session中的用戶信息,那不如直接用Cookie來(lái)保存,也省去創(chuàng)建Session對(duì)象的開(kāi)銷。
實(shí)現(xiàn)起來(lái)可以分兩步:首先,在用戶成功登陸門(mén)戶系統(tǒng)A時(shí),在用戶本地建立Cookie,保存用戶身份信息;然后,在用戶點(diǎn)擊另一個(gè)WEB系統(tǒng)B的鏈接時(shí),B系統(tǒng)把保存在用戶機(jī)器上的Cookie提取出來(lái)進(jìn)行驗(yàn)證,如果Cookie有效則將用戶定向到要訪問(wèn)的頁(yè)面上,無(wú)效則拒絕用戶訪問(wèn)請(qǐng)求資源并要求用戶重新登錄。
Cookie是在HTTP協(xié)議下服務(wù)器或腳本維護(hù)客戶機(jī)上信息的一種方式,Cookie以文件形式保存在客戶機(jī)的硬盤(pán)上,從安全性分析,極易被被篡改,而且里面保存的用戶隱私也容易被泄露。那么如何保證Cookie的安全性和有效性呢?有兩種方法,一是對(duì)Cookie進(jìn)行加密保存,這樣也就需要配套的解密過(guò)程;還有一個(gè)就是采用SSL等技術(shù)加密Cookie的傳輸通道,并在用戶退出時(shí)刪除他本機(jī)上的Cookie。
經(jīng)過(guò)以上分析與研究,我們選定賬戶映射法來(lái)實(shí)現(xiàn)單點(diǎn)登錄,并用RSA算法加密后的用戶信息作為鏈接參數(shù)在系統(tǒng)間進(jìn)行傳遞。以車(chē)務(wù)段內(nèi)網(wǎng)WEB信息系統(tǒng)改造為例作具體說(shuō)明。
由于車(chē)務(wù)段的OA系統(tǒng)還集成了值班表系統(tǒng)、站長(zhǎng)日志、財(cái)務(wù)預(yù)算、設(shè)備報(bào)修等其他系統(tǒng),用戶量最多,功能最強(qiáng)大,使用率最高,因此,將其作為單點(diǎn)登錄系統(tǒng)的門(mén)戶系統(tǒng),即將它的用戶登錄頁(yè)面作為唯一的登錄入口。然后,在OA系統(tǒng)的首頁(yè)加入了公文流轉(zhuǎn)系統(tǒng)、信息共享系統(tǒng)、職工崗位動(dòng)態(tài)系統(tǒng)、節(jié)能節(jié)支預(yù)警系統(tǒng)的WEB鏈接,并對(duì)這些WEB系統(tǒng)進(jìn)行用戶映射改造,最后在應(yīng)用服務(wù)器上部署加解密服務(wù)的Web services。圖1以節(jié)能節(jié)支預(yù)警系統(tǒng)無(wú)縫接入OA系統(tǒng)為例,來(lái)演示實(shí)現(xiàn)單點(diǎn)登錄WEB系統(tǒng)的處理流程。
最大化方便用戶使用是信息系統(tǒng)設(shè)計(jì)的宗旨。信息化領(lǐng)域擴(kuò)大的同時(shí),系統(tǒng)集成也逐漸提上日程,單點(diǎn)登錄既為用戶提供了便捷,也為信息系統(tǒng)集成打下了基礎(chǔ)。和國(guó)內(nèi)外流行的單點(diǎn)登錄解決方案相比,賬戶映射法有些過(guò)時(shí),但對(duì)原有系統(tǒng)改造量最小,實(shí)現(xiàn)最容易,仍可作為鐵路內(nèi)網(wǎng)WEB系統(tǒng)實(shí)現(xiàn)單點(diǎn)登錄的首選。但是,若從電子商務(wù)與內(nèi)網(wǎng)信息集成發(fā)展的安全性考慮,構(gòu)建第三方統(tǒng)一認(rèn)證授權(quán)平臺(tái),仍需作為日后新系統(tǒng)架構(gòu)形式進(jìn)行部署。
[1]李凡,王流一.《一種基于票據(jù)的單點(diǎn)登錄協(xié)議設(shè)計(jì)與實(shí)現(xiàn)》.計(jì)算機(jī)工程與科學(xué).2012年第2期.
[2]張旋.《一種基于證書(shū)的單點(diǎn)登錄方案設(shè)計(jì)》.信息技術(shù).2012年第8期.
責(zé)任編輯:王華 王輝
來(lái)稿日期:2012-10-31