引言
現(xiàn)代企業(yè)內(nèi)部建立很多應(yīng)用系統(tǒng),如電子郵件、辦公OA、ERP、PDM、檔案系統(tǒng)等。這些系統(tǒng)往往有著獨(dú)立的用戶認(rèn)證模塊和機(jī)制,用戶需要分別登錄每一個系統(tǒng)。且用戶要處理的業(yè)務(wù)信息分散在各應(yīng)用系統(tǒng)中,需要來回切換系統(tǒng)才能進(jìn)行查閱和辦理,給用戶的使用造成諸多不便。目前,基于單點(diǎn)登錄(single sign on,SSO)和信息集成的企業(yè)信息門戶(entERPrise information portal,EIP)成為最終解決方案。用戶只需登錄一次信息門戶,就能自動完成對各個應(yīng)用系統(tǒng)的單點(diǎn)登錄,而且該用戶在各應(yīng)用系統(tǒng)中的待處理事務(wù)和所關(guān)注的信,用戶可以直觀地看到需要處理的全部信息,并根據(jù)事務(wù)的輕重緩急直接進(jìn)行處理。
要建立一個這樣的企業(yè)信息門戶,需要解決2個關(guān)鍵問題:一是實(shí)現(xiàn)單點(diǎn)登陸;二是實(shí)現(xiàn)信息集成。目前有很多企業(yè)信息門戶的實(shí)現(xiàn)方案,其中常見的單點(diǎn)登錄認(rèn)證機(jī)制有: Kerberos 、PKI 、KryptoKnight 等,常用的技術(shù)有:Web Service、Cookie 等。在單點(diǎn)登錄系統(tǒng)的實(shí)現(xiàn)過程中,往往會碰到如下問題:
1) 企業(yè)現(xiàn)有的各個應(yīng)用系統(tǒng)間相互獨(dú)立或者通信狀況混亂,對外接口也不同,給應(yīng)用系統(tǒng)的集成帶來了極大困難;2) 同一個用戶,擁有多個應(yīng)用系統(tǒng)的訪問帳號,使用戶信息難以統(tǒng)一管理;3) Cookie 不能跨域的限制也使實(shí)現(xiàn)各個應(yīng)用系統(tǒng)之間Cookie 共享成為一個難題。信息集成是在實(shí)現(xiàn)SSO 的前提條件下進(jìn)行的,主要的問題是訪問權(quán)限和跨域信息集成問題。目前,大多數(shù)門戶系統(tǒng)僅僅實(shí)現(xiàn)了單點(diǎn)登錄,對于信息集成僅僅做到對公用信息的集成。因此,筆者介紹了基于Ajax 和Web應(yīng)用原理,繞過Cookie 跨域的限制,采用用戶映射機(jī)制設(shè)計(jì)的單點(diǎn)登錄和對跨域信息集成的方案,以解決上述問題。
1 設(shè)計(jì)方案
企業(yè)信息門戶主要包含統(tǒng)一認(rèn)證、單點(diǎn)登錄和信息集成3 部分。統(tǒng)一認(rèn)證系統(tǒng)主要功能是:用戶訪問EIP,首先要進(jìn)行系統(tǒng)登錄,統(tǒng)一認(rèn)證系統(tǒng)根據(jù)用戶提供的登錄信息,進(jìn)行身份驗(yàn)證,如果通過驗(yàn)證,返回給用戶一個認(rèn)證的EIP 憑據(jù);然后系統(tǒng)對通過認(rèn)證的EIP 用戶進(jìn)行單點(diǎn)登錄操作。單點(diǎn)登錄的主要功能是:根據(jù)門戶系統(tǒng)用戶映射表中維護(hù)的EIP 用戶在各應(yīng)用系統(tǒng)的用戶名及密碼,自動在系統(tǒng)底層完成對各應(yīng)用系統(tǒng)的登錄,由各應(yīng)用系統(tǒng)分別進(jìn)行授權(quán)并向客戶端瀏覽器發(fā)送允許票據(jù)Cookie。信息集成部分的主要功能是:將用戶在各應(yīng)用系統(tǒng)中的待處理事務(wù)和用戶所關(guān)注的公共或私有的信息經(jīng)過提取和格式化處理后,集中顯示在用戶的門戶頁面上,提供給用戶進(jìn)行快速查閱和辦理。上述過程對用戶是透明的,用戶看到的是登錄了企業(yè)信息門戶,自己在各系統(tǒng)中需要辦理和關(guān)注的信息便集中顯示在門戶頁面中了。整個企業(yè)門戶系統(tǒng)的結(jié)構(gòu)如圖1。
圖1 企業(yè)信息門戶結(jié)構(gòu)圖
1.1 統(tǒng)一認(rèn)證
統(tǒng)一認(rèn)證中心提供系統(tǒng)的認(rèn)證服務(wù)和用戶管理,但并不包括集中的授權(quán)和會話的管理,授權(quán)和會話的管理依賴于各應(yīng)用系統(tǒng)本身。其主要功能是:向所有應(yīng)用系統(tǒng)提供認(rèn)證服務(wù)和入口,提供用戶調(diào)用接口和用戶基本信息服務(wù),同時提供對認(rèn)證系統(tǒng)管理功能。EIP 認(rèn)證中心的用戶包含全部應(yīng)用系統(tǒng)的用戶,是所有應(yīng)用系統(tǒng)用戶的并集。每個應(yīng)用系統(tǒng)的登錄認(rèn)證機(jī)制可能各不相同,要根據(jù)具體情況而定。對于已經(jīng)上線運(yùn)行的應(yīng)用系統(tǒng),由于這些系統(tǒng)往往有著獨(dú)立的認(rèn)證機(jī)制,而且有很多業(yè)務(wù)流程涉及到用戶信息,單點(diǎn)登錄的實(shí)現(xiàn)應(yīng)盡量不影響這些應(yīng)用系統(tǒng)的原認(rèn)證模塊;對于新的應(yīng)用系統(tǒng),則可以完全由信息門戶來接管用戶身份的認(rèn)證?偟膩碚f,在信息門戶中,單點(diǎn)登錄只負(fù)責(zé)決定用戶能否進(jìn)入某個應(yīng)用系統(tǒng),而用戶對應(yīng)用系統(tǒng)資源的訪問權(quán)限則由各應(yīng)用系統(tǒng)獨(dú)立控制。
1.2 單點(diǎn)登錄
用戶登錄信息門戶經(jīng)過統(tǒng)一認(rèn)證中心認(rèn)證通過后,系統(tǒng)就進(jìn)行SSO 單點(diǎn)登錄。SSO 模塊包含用戶映射和單點(diǎn)登錄2 部分。
1.2.1 用戶映射
將用戶在各應(yīng)用系統(tǒng)的用戶名和密碼經(jīng)過加密后保存在EIP 系統(tǒng)用戶映射表中,如表1。該部分包含一個應(yīng)用系統(tǒng)注冊模塊和一個應(yīng)用用戶注冊模塊。對于加入單點(diǎn)登錄的每一個應(yīng)用系統(tǒng),系統(tǒng)管理員會為其注冊一個全局唯一的應(yīng)用ID 并設(shè)置對應(yīng)的認(rèn)證接口,然后初始化用戶映射表。初始化的主要工作是導(dǎo)入各應(yīng)用系統(tǒng)與認(rèn)證相關(guān)的主要信息(如用戶名、密碼等),并與EIP 用戶ID、應(yīng)用ID進(jìn)行關(guān)聯(lián),以后新增的用戶可以通過用戶注冊模塊進(jìn)行注冊。
表1 用戶映射表
1.2.2 Form 表單的單點(diǎn)登錄
這種登錄機(jī)制是針對那些基于瀏覽器的Form表單方式的Web 應(yīng)用系統(tǒng)設(shè)計(jì)的,不需要對應(yīng)用系統(tǒng)的原有認(rèn)證模塊作任何修改。在用戶通過EIP 認(rèn)證中心登錄認(rèn)證通過后,系統(tǒng)根據(jù)用戶映射表中對應(yīng)的應(yīng)用ID、用戶名和密碼,自動向用戶瀏覽器生成Ajax 程序代碼,在客戶端由Ajax 通過底層模擬form 表單向應(yīng)用系統(tǒng)登錄模塊提交登錄請求,應(yīng)用系統(tǒng)登錄模塊根據(jù)提交的用戶名和密碼進(jìn)行登錄校驗(yàn),若用戶名和密碼正確,返回登錄成功的信息包,并向客戶端瀏覽器寫入允許票據(jù)Cookie,建立會話;否則返回登錄失敗的信息包。Ajax 程序根據(jù)返回信息包中的URL 或Html 信息判斷是否登錄成功。
1.2.3 非Form 表單的單點(diǎn)登錄
這種登錄方式如Domino 應(yīng)用系統(tǒng)、ftp 應(yīng)用等比較常見,它沒有form 登錄頁面,不能運(yùn)用模擬表單提交的方式登錄。因此,需要運(yùn)用Xmlhttp 模擬瀏覽器提交訪問請求,通過Xmlhttp.Open 攜帶用名和密碼向目標(biāo)應(yīng)用系統(tǒng)發(fā)送訪問請求,并通過Xmlhttp.Status 來獲得返回狀態(tài),如果狀態(tài)等于200,表示用戶名和密碼正確,登錄成功,應(yīng)用系統(tǒng)會向客戶端瀏覽器寫入允許票據(jù)Cookie,建立會話。以上2 種登錄均屬于常規(guī)單點(diǎn)登錄,如圖2。
圖2 常規(guī)單點(diǎn)登錄圖
1.2.4 對單點(diǎn)登錄的改造
對某些應(yīng)用安全性要求比較高,不希望用戶帳號密碼在外部服務(wù)器上存放或在網(wǎng)絡(luò)上傳輸,要實(shí)現(xiàn)這些應(yīng)用的單點(diǎn)登錄,可以對應(yīng)用系統(tǒng)的認(rèn)證模塊進(jìn)行少量改造。使應(yīng)用系統(tǒng)能夠訪問認(rèn)證中心用戶密鑰來驗(yàn)證用戶真實(shí)身份,以此作為安全憑證為用戶授權(quán)訪問系統(tǒng)資源。
具體過程是:1) 用戶登錄信息門戶,由EIP 認(rèn)證中心隨機(jī)生成32 位的一次性密鑰,并保存在數(shù)據(jù)庫映射表中;2) 系統(tǒng)攜帶該密鑰向應(yīng)用系統(tǒng)改造過的認(rèn)證模塊發(fā)送登錄請求;3) 應(yīng)用系統(tǒng)認(rèn)證模塊接收用戶密鑰后連接EIP 系統(tǒng)數(shù)據(jù)庫與映射表中存儲的用戶密鑰進(jìn)行核對,如果密鑰正確,則表明該用戶是登錄EIP 成功的合法用戶;4) 清除映射表中該用戶的密鑰,應(yīng)用系統(tǒng)開始進(jìn)行授權(quán),向用戶客戶端瀏覽器生成允許票據(jù)Cookie,建立會話。改造后的單點(diǎn)登錄如圖3。
圖3 改造后的單點(diǎn)登錄圖
1.2.5 單點(diǎn)登錄注銷
由于實(shí)現(xiàn)單點(diǎn)登錄的系統(tǒng)比較多并且登錄方式多樣,有基于Form 認(rèn)證的應(yīng)用系統(tǒng)、也有基于非Form 認(rèn)證的應(yīng)用系統(tǒng)等,為了便于企業(yè)信息門戶的快速部署和實(shí)現(xiàn)及簡化操作起見,筆者建議對各應(yīng)用系統(tǒng)不做逐一注銷,用戶只需關(guān)閉全部瀏覽器窗口即可完成所有應(yīng)用系統(tǒng)的注銷。
1.3 信息集成
信息集成主要包含對各應(yīng)用系統(tǒng)的公共信息和個人待辦事務(wù)、待審批流程、郵件、消息等私有信息的集成。公共信息是與用戶無關(guān)聯(lián)性的、允許所有用戶瀏覽的公共性信息,而待辦事務(wù)、待審批流程、郵件、消息等屬于用戶私有信息,與用戶有關(guān)聯(lián)性。信息集成一般有2 種方式:第1 種是數(shù)據(jù)庫級集成,就是通過門戶服務(wù)器端直接訪問應(yīng)用系統(tǒng)的數(shù)據(jù)庫來獲取需要集成的數(shù)據(jù),這種方式的優(yōu)點(diǎn)是不受用戶客戶端瀏覽器環(huán)境的限制,但缺點(diǎn)是需要單獨(dú)開發(fā)業(yè)務(wù)處理邏輯,而且門戶服務(wù)器直接操作應(yīng)用系統(tǒng)的數(shù)據(jù)庫,存在很大的安全風(fēng)險(xiǎn);第2種方法是應(yīng)用級集成,就是通過調(diào)用應(yīng)用系統(tǒng)已有模塊功能進(jìn)行信息集成,這種方式的最大優(yōu)點(diǎn)是不需要開發(fā)業(yè)務(wù)邏輯,直接利用應(yīng)用系統(tǒng)的功能模塊,且不直接訪問應(yīng)用系統(tǒng)的數(shù)據(jù)庫,不存在安全性問題。缺點(diǎn)就是此方式需要先實(shí)現(xiàn)單點(diǎn)登錄,若解決了單點(diǎn)登錄的問題,信息的集成就能夠快速實(shí)現(xiàn)。根據(jù)前文單點(diǎn)登錄結(jié)論,筆者采取第2 種信息集成方式即應(yīng)用級集成,來實(shí)現(xiàn)信息的集成。
企業(yè)中各應(yīng)用系統(tǒng)的訪問域名各不相同,有些還是通過IP 地址或端口號來訪問。因此,信息集成一般都存在跨域的集成問題。對于跨域信息集成的問題可以通過2 種方式解決:一是對于公共類信息的集成,可以是動態(tài)程序語言(如java、.net 等)通過服務(wù)器端進(jìn)行數(shù)據(jù)集成;二是對于用戶私有類信息,因?yàn)樾枰脩魰捚睋?jù)才能訪問,因此需要使用Ajax 通過客戶端進(jìn)行信息集成。具體實(shí)現(xiàn)的過程是:根據(jù)集成的業(yè)務(wù)需要,使用java 等動態(tài)Web技術(shù)或Ajax 技術(shù)為每個應(yīng)用系統(tǒng)開發(fā)出多個webapp 模塊,將這些模塊集成在信息門戶中,分別用來提取用戶的待辦事務(wù)、郵件、訂單等私有信息和用戶關(guān)注的公共資訊類信息。用戶可根據(jù)自己在信息門戶中的角色權(quán)限進(jìn)行個性化定制,選擇不同的webapp 模塊,將自己需要的或關(guān)注的信息集中顯示在信息門戶中,方便自己進(jìn)行查閱和直接辦理。
2 系統(tǒng)實(shí)現(xiàn)
根據(jù)上述設(shè)計(jì)方案,筆者通過Tomcat6.0 + JSP+ Mysql5.1 對內(nèi)部Domino 的OA 系統(tǒng)、郵件系統(tǒng)、Oracle 的ERP 系統(tǒng)、PDM 系統(tǒng)、檔案系統(tǒng)等描述實(shí)現(xiàn)過程。
2.1 準(zhǔn)備工作
搭建Tomcat 的Web 服務(wù)器和Mysql 數(shù)據(jù)庫,創(chuàng)建EIP 用戶表EIPUser 和用戶在各應(yīng)用系統(tǒng)的映射表UserMap,并初始化用戶數(shù)據(jù),將用戶在各應(yīng)用系統(tǒng)中的用戶名和密碼導(dǎo)入到映射表中。
2.2 SSO 的實(shí)現(xiàn)
編寫Ajax 的客戶端單點(diǎn)登錄函數(shù)SSOLogin,JSP 程序根據(jù)EIP 用戶ID 從映射表中取出該用戶的全部記錄, 將應(yīng)用ID 、用戶名和密碼傳遞給SSOLogin 函數(shù),并向客戶端瀏覽器生成Ajax 代碼,由客戶端執(zhí)行該代碼。以下是其中實(shí)現(xiàn)SSOLogin的部分代碼:
2.3 信息集成的實(shí)現(xiàn)
在實(shí)現(xiàn)SSO 登錄后,由于各應(yīng)用系統(tǒng)已經(jīng)向用戶的客戶端瀏覽器寫入允許票據(jù)Cookie,用戶再次訪問這些應(yīng)用系統(tǒng)時,就不會彈出用戶名密碼了。因此, 針對要集成的各應(yīng)用系統(tǒng), 開發(fā)不同的webapp 應(yīng)用包,并將其添加在用戶的信息門戶中。用戶的瀏覽器通過執(zhí)行這些應(yīng)用包程序就可以提取出相應(yīng)的信息,經(jīng)格式化后顯示在信息門戶頁面的指定區(qū)域。另外,信息門戶支持用戶個性化設(shè)置功能,用戶可以根據(jù)系統(tǒng)權(quán)限自由選擇webapp 應(yīng)用包,按照自己的需要定制要集成的內(nèi)容。其中的一個應(yīng)用包的部分代碼為:
function webapp(){//集成辦公OA 公文信息,提取需要的數(shù)據(jù) //
如圖4,該方案已在北方光電公司企業(yè)信息門戶中被成功應(yīng)用。該信息門戶實(shí)現(xiàn)對企業(yè)內(nèi)部辦公OA、ERP、PDM、檔案等應(yīng)用系統(tǒng)單點(diǎn)登錄,并將當(dāng)前用戶在各系統(tǒng)中的待辦事務(wù)及郵件、公告公文、資訊等信息分類顯示在門戶中。
圖4 企業(yè)信息門戶
3 結(jié)束語
該方案不需對應(yīng)用系統(tǒng)做任何改造或只做少量改造,即可實(shí)現(xiàn)對不同登錄方式的應(yīng)用系統(tǒng)的單點(diǎn)登錄及信息集成。該方案對于快速實(shí)現(xiàn)多系統(tǒng)單點(diǎn)登錄與信息集成,整合企業(yè)資源、建立企業(yè)信息門戶系統(tǒng)有一定的參考價值。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:企業(yè)信息門戶單點(diǎn)登錄和信息集成
本文網(wǎng)址:http://www.ezxoed.cn/html/consultation/1083938098.html