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