IBM Portal與單點(diǎn)登錄、集成企業(yè)級應(yīng)用
作者: 鄭 文 平 (2005.08)
內(nèi)容簡介:
本文首先討論了什么是單點(diǎn)登錄,然后分別介紹集成IBM的產(chǎn)品(Lotus Notes)和非IBM產(chǎn)品(指運(yùn)行在WebLogic,Tomcat等服務(wù)器上的業(yè)務(wù)系統(tǒng))兩類企業(yè)及應(yīng)用,我們的重點(diǎn)在于后者。也就是說,主要解決以下幾個(gè)問題:
1.什么是單點(diǎn)登錄(Single SignOn),為什么要SSO。
2.Portal 與 OA 的SSO。
3.Portal 與普通企業(yè)及應(yīng)用集成的SSO。這個(gè)問題是本文的核心,我們將分以下幾部分來介紹:
集成企業(yè)級應(yīng)用程序業(yè)務(wù)系統(tǒng)的原理
嚴(yán)格地說,單點(diǎn)登錄指的是允許用戶登錄到一個(gè)應(yīng)用,這個(gè)應(yīng)用帶有經(jīng)過認(rèn)證的到其他應(yīng)用的訪問途徑,登錄到這個(gè)應(yīng)用之后,用戶無需再遭遇任何其他的認(rèn)證。用更實(shí)際的話來說,它包括可以將這次主要的登錄映射到其他應(yīng)用中用于同一個(gè)用戶的登錄的機(jī)制。 我們的目標(biāo)是,SSO 提供登錄到 WebSphere Portal 的能力,并允許使用那些用戶憑證訪問 Domino 環(huán)境、Domino、Sametime、QuickPlace 以及其他基于 Domino 的工具;允許用戶訪問自己權(quán)限以內(nèi)的所有企業(yè)及應(yīng)用,即:運(yùn)行在普通應(yīng)用程序服務(wù)器上的各種業(yè)務(wù)系統(tǒng)。例如,運(yùn)行在WebLogic或者Tomcat上的jsp應(yīng)用程序,運(yùn)行在IIS上的asp,aspx系統(tǒng),以及php系統(tǒng)。如果在 WebSphere Portal 和 業(yè)務(wù)系統(tǒng)之間沒有 SSO 關(guān)系的話,那么用戶每次訪問某個(gè)包含來自于基于業(yè)務(wù)系統(tǒng)的應(yīng)用程序或者服務(wù)的信息的 portlet 時(shí),都需要登錄到業(yè)務(wù)系統(tǒng)環(huán)境中。此外,有些 WebSphere Portal API和服務(wù),比如 人員在線感知 ,沒有提供登錄工具。即使這些服務(wù)不提供獨(dú)特的登錄工具,為了運(yùn)行它們?nèi)匀恍枰ㄟ^ SSO 進(jìn)行認(rèn)證。我們以齊魯石化綜合數(shù)據(jù)平臺(tái)為例,如果實(shí)現(xiàn)了單點(diǎn)登錄,那么,一旦用戶登錄進(jìn)入Portal系統(tǒng),該用戶就可以在不用再次登錄的情況下,訪問她所擁有權(quán)限的、包括OA和普通企業(yè)即應(yīng)用程序在內(nèi)的所有業(yè)務(wù)系統(tǒng),如下圖所示:
圖1—1 Portal與企業(yè)級業(yè)務(wù)系統(tǒng)實(shí)現(xiàn)了SSO
二、SSO的實(shí)現(xiàn)
我們還是以齊魯石化綜合數(shù)據(jù)集成平臺(tái)為例,改企業(yè)現(xiàn)在存在一下四套業(yè)務(wù)系統(tǒng),包括Lotus Notes 開發(fā)的OA系統(tǒng),一套基于WebLogic的jsp系統(tǒng),兩套基于IIS的asp系統(tǒng),我們就以集成這四套系統(tǒng)為例,簡單介紹SSO的實(shí)現(xiàn):
齊魯石化現(xiàn)在這四套系統(tǒng)是:
圖2-1 齊魯石化現(xiàn)有的應(yīng)用業(yè)務(wù)系統(tǒng)
我們將采用如下幾種方式實(shí)現(xiàn)SSO:
1、 統(tǒng)一LDAP驗(yàn)證集成:
圖2-1 SSO的第一種方式:統(tǒng)一LDAP驗(yàn)證
我們將四套業(yè)務(wù)系統(tǒng)的所有用戶信息一起放到LDAP服務(wù)器內(nèi),由ldap統(tǒng)一對四套系統(tǒng)的用戶進(jìn)行驗(yàn)證。這樣做比較有利于用戶及權(quán)限的管理,但是也存在弊端。這四套系統(tǒng)是有不同的四家IT公司開發(fā),用戶信息放在不同平臺(tái)的不同數(shù)據(jù)庫中,而且這四套系統(tǒng)除OA外,各有不同的用戶組群,放在一起反而不利于管理。所以,此法SSO雖然可行,卻不適合該Portal系統(tǒng)。我們不采用這種方法。
2、 基于Portal系統(tǒng)LDAP的憑證保險(xiǎn)庫法
圖2-2 SSO的第二種方法:基于Portal系統(tǒng)LDAP的憑證保險(xiǎn)庫法
我們采用Portal系統(tǒng)獨(dú)立存在的LDAP,由這個(gè)LDAP驗(yàn)證Portal系統(tǒng)用戶的合法性,一旦驗(yàn)證通過,用戶就登錄進(jìn)Portal系統(tǒng)。然后用戶在給定權(quán)限的各個(gè)業(yè)務(wù)系統(tǒng)Portlet中存儲(chǔ)在各個(gè)業(yè)務(wù)系統(tǒng)中的用戶信息,Portal系統(tǒng)會(huì)統(tǒng)一管理這些信息,然后自動(dòng)到各個(gè)業(yè)務(wù)系統(tǒng)的用戶信息庫中校驗(yàn),一旦通過校驗(yàn),該portlet就能顯示業(yè)務(wù)系統(tǒng)的授權(quán)信息。通常我們是在portlet中放入一個(gè)Iframe,用戶在Portal系統(tǒng)中通過portlet中的這個(gè)Iframe來訪問具體業(yè)務(wù)系統(tǒng)中的授權(quán)信息。
3、 基于OA系統(tǒng)LDAP的憑證保險(xiǎn)庫法:
基本上等同于第二種方法,不過更簡單。OA系統(tǒng)是企業(yè)內(nèi)部沒個(gè)人都使用的業(yè)務(wù)系統(tǒng),而且它已經(jīng)有一套成熟的LDAP,我們不必再為Portal創(chuàng)建LDAP服務(wù)器,我們可以直接使用OA系統(tǒng)的,所以有點(diǎn)麻煩的是,在使用Portal系統(tǒng)的時(shí)候,OA必須是開著的,擊是你不使用OA,因?yàn)檎J(rèn)證的時(shí)候是到OA的LDAP服務(wù)其中驗(yàn)證的。其他方面則與第二種方法完全相同。
一、SSO是如何工作的?
WebSphere Portal 和 Lotus Domino 之間的單點(diǎn)登錄是通過一種稱為輕量級第三方認(rèn)證(LTPA)的機(jī)制來實(shí)現(xiàn)的。WebSphere 應(yīng)用服務(wù)器(還包括 WebSphere Portal 和其他任何運(yùn)行在 WebSphere 環(huán)境中的應(yīng)用程序)和 Domino 都使用LTPA。當(dāng) LTPA 機(jī)制用于由多個(gè)服務(wù)器組成的環(huán)境中時(shí),它是通過使用 Domain Cookie 而啟用的。這種經(jīng)過加密的會(huì)話 cookie 被放置在用戶瀏覽器中,并包含了一些信息,WebSphere 或者 Domino Application 服務(wù)器可以加密這些信息,并使用這些信息來說明用戶已經(jīng)通過該 cookie 所覆蓋的DNS(Domain Naming Service,域名服務(wù))域中的認(rèn)證。
LTPA cookie 包含以下信息:
· Cookie名稱:總是設(shè)置為 LtpaToken。
· 域:設(shè)置為 Internet 域,該域由參與單點(diǎn)登錄的所有服務(wù)器所共享(例如:mycompany.com)。
· Cookie 到期:設(shè)置為當(dāng)瀏覽器的壽命終止時(shí)刪除該 cookie。
· 安全:設(shè)置為開狀態(tài),以強(qiáng)制使用安全套接字層(SSL)。有一個(gè) LTPA 配置有一個(gè)設(shè)置參數(shù),使它創(chuàng)建只通過 SSL 發(fā)送的 cookie。
· Cookie值:這被設(shè)置為 LTPA 標(biāo)記,接下來會(huì)對其進(jìn)行描述。
LTPA標(biāo)記是一個(gè)加密的字符串,它包含以下信息:
· 用戶數(shù)據(jù):一般被設(shè)置為用戶 ID,但也可以是任何用于惟一標(biāo)識(shí)用戶的用戶信息。
· 過期時(shí)間:與 Cookie 過期不同,這個(gè)字段用于強(qiáng)加一個(gè)時(shí)間限制,時(shí)間限制從登錄進(jìn)來的那一刻算起,而不受瀏覽器活動(dòng)或者不活動(dòng)所影響。這個(gè)時(shí)間限制是一個(gè)可配置的 LTPA 設(shè)置,缺省情況下為30分鐘。
二、SSO 的集成效果:
我們可以把整個(gè)OA系統(tǒng)作為一個(gè)整體,即一個(gè)Portlet集成進(jìn)Portal系統(tǒng),也可以根據(jù)OA內(nèi)不同的文件數(shù)據(jù)庫(.nsf)俺功能拆分為各個(gè)不同的功能單元,每個(gè)功能單元作為一個(gè)單獨(dú)的portlet集成進(jìn)Portal系統(tǒng)。例如,
三、怎樣實(shí)現(xiàn)OA 與Portal 的SSO?
Portal 與OA 的SSO可以通過配置ltpa的方法實(shí)現(xiàn)。通俗一點(diǎn)講就是:用戶登錄Portal后,Portal系統(tǒng)會(huì)把用戶登錄信息加密成ltpa并存放到某一位置,當(dāng)用戶繼續(xù)訪問OA中的授權(quán)資源時(shí),OA系統(tǒng)會(huì)自動(dòng)讀取改位置的ltpa,讀到并解密后拿到OA系統(tǒng)中驗(yàn)證,如果驗(yàn)證通過,則顯示給用戶他要的授權(quán)信息。所以要配置Portal 與 OA 之間的SSO 非常容易,只要先將OA系統(tǒng)服務(wù)器的ltpa導(dǎo)出并存為.key文件,然后導(dǎo)入Portal系統(tǒng)所在的服務(wù)器(WebShpere Application Server)中就可以了。
一、概述
WebSphere Portal 提供了 Credential Vault (憑證保險(xiǎn)庫)功能。Credential Vault 通過 Basic Authentication Header 將用戶名和密碼傳遞給后端應(yīng)用程序。為了使 Domino 服務(wù)器接受通過這個(gè)頭部傳遞進(jìn)來的憑證,必須將服務(wù)器會(huì)話驗(yàn)證配置為Single-Server 模式。在 Multi-Server 模式中,該服務(wù)器將會(huì)只接受通過 LTPA 機(jī)制傳遞的憑證。因此,為了與 Domino 應(yīng)用程序一起使用用于 SSO 的 Credential Vault,您必須將 Domino 服務(wù)器會(huì)話驗(yàn)證配置為 Single-Server 模式。
要使用 Credential Vault,用戶需輸入一些憑證,輸入一次就夠了。隨后,這些憑證被存放在一個(gè)經(jīng)過加密的數(shù)據(jù)庫表中,每當(dāng)用戶訪問該 portlet 時(shí),這些憑證便被傳遞給后端應(yīng)用程序。要了解關(guān)于配置 Credential Vault 的細(xì)節(jié),參見 WebSphere Portal InfoCenter 。
二、憑證保險(xiǎn)庫實(shí)現(xiàn)SSO原理
我們以一個(gè)最簡單的SSO過程為例介紹:
1.普通業(yè)務(wù)系統(tǒng)的登錄過程:
系統(tǒng)首先提供一個(gè)界面讓我們輸入我們在應(yīng)用程序中的用戶信息:
… …
<form name=’login’ action=”chech_login.jsp” method=”POST”>
<input type=”lable”>請輸入您的用戶名:</lable>
<input type=”text” name=”username” id=”username” length=”10”></text>
<input type=”lable”>請輸入您的密碼:</lable>
<input type=”password” name=”password” id=”password” length=”10”></text>
<input type=”submit” value=”登錄”>
<input type=”reset” value=” 取消”>
</form>
2.用戶輸入用戶名和密碼后,點(diǎn)擊“登錄”按鈕,該頁面提交到form所對應(yīng)的Action(check_login.jsp)處理,我們看check_login.jsp的代碼:
… …
<%
String username=request.getParamenter(“username”);
String password=request.getParamenter(“password”);
……
接下來提交到數(shù)據(jù)庫驗(yàn)證用戶信息的合法性,如果合法,定位到授權(quán)信息頁面;否則,重定位回到登錄頁面login.jsp。
%>
3. Portlet開發(fā)中是如何解決這個(gè)問題的?
其實(shí)起關(guān)鍵作用的還是check_login.jsp頁面,它需要獲得用戶名和密碼兩個(gè)鍵值,然后拿著兩個(gè)參數(shù)到后臺(tái)數(shù)據(jù)庫去驗(yàn)證。常規(guī)登錄方式中這兩個(gè)參數(shù)是通過login.jsp來獲得的。事實(shí)上,只要portlet能為該頁面提供這兩個(gè)鍵值,也就是先了登錄的自動(dòng)化。而portlet要實(shí)現(xiàn)這兩個(gè)參數(shù)的提供是非常簡單的,所以實(shí)現(xiàn)單點(diǎn)登錄也就非常簡單了。我們可以復(fù)制一個(gè)check_login.jsp文件,例如check_portal_login.jsp,這個(gè)頁面的兩個(gè)參數(shù)是portlet提供的。剩下的事完全交給業(yè)務(wù)系統(tǒng)去處理,頁面流轉(zhuǎn)和全縣控制都不用我們管了。
三、開發(fā)Portlet實(shí)現(xiàn)SSO的方法
1、JSP 取值傳送URL法。
顧名思義,我們開發(fā)一個(gè)使用系統(tǒng)專用槽的portlet,使用憑證保險(xiǎn)庫相關(guān)接口在PortletView.jsp中取出用戶存儲(chǔ)在憑證保險(xiǎn)庫中的鍵值,然后以URL的方式傳送到Iframe內(nèi)。例如:
〉〉〉〉〉〉〉PortletView.jsp中的部分代碼:
<%
String userId =viewBean.getUserId();
String password=viewBean.getPassword();
if( userId.length()>0 ) {
String url = http://hostname:8080/check_portal_login.jsp;
url+=”?username="+userId+"&password="+password;
%>
<Iframe src="<%=url%> " align="left" width=100% frameborder=no marginheight="2" scrolling="auto" marginwidth="2" height=600></Iframe>
如果用戶已經(jīng)在憑證高先庫中存儲(chǔ)了鍵值的話,該portlet的view頁面被初始化時(shí),Iframe中將顯示用戶成功登錄后的授權(quán)信息,也就是實(shí)現(xiàn)了SSO。
2、Class 取值寫Session法。
顧名思義,我們在Portlet的控制類中取得用戶存儲(chǔ)在憑證保險(xiǎn)庫中的鍵值對,并在PortletView的doview()方法中寫入Session.而專為portal
作者簡介:鄭文平,“神狐”軟件工作室創(chuàng)立者,IBM WebSpher Portal產(chǎn)品開發(fā)人員,原北京東華合創(chuàng)軟件院軟件工程師,Portal信息化專員,長期從事Portal(尤其是IBM Websphere Portal)開發(fā),曾參與并引領(lǐng)了北京馳普企業(yè)門戶、山東新汶礦務(wù)局遠(yuǎn)程調(diào)度系統(tǒng)、中國石化齊魯公司綜合數(shù)據(jù)平臺(tái)、北京供電局虛擬門戶產(chǎn)品,北京航信企業(yè)門戶等多個(gè)Portal項(xiàng)目的開發(fā)。
如果您有以下需要,歡迎您與SagFox SoftWare 聯(lián)系:
1、如果您的公司有IBM WebSpher Portal 項(xiàng)目需要實(shí)施但缺少必需的技術(shù)力量,而您又不愿安排工程師們邊學(xué)習(xí)邊開發(fā)而影響項(xiàng)目質(zhì)量,歡迎您把項(xiàng)目外包給 SagFox SoftWare,或者以項(xiàng)目合作的方式聯(lián)合開發(fā)。
2、如果您們是一個(gè)Java 開發(fā)者并打算投身Portal領(lǐng)域,歡迎您接受 SagFox SoftWare 針對公司技術(shù)人員的開發(fā)培訓(xùn),SagFox SoftWare 同時(shí)開展針對個(gè)人的技術(shù)指導(dǎo)與職業(yè)規(guī)劃,助您謀得高薪。
3、如果您是一個(gè)嫻熟的Portal開發(fā)者,歡迎您加盟SagFox SoftWare,我們的團(tuán)隊(duì)正在飛速發(fā)展。我們也歡迎入門者加入我們的討論組,SagFox SoftWare 盡力解答欠成熟開發(fā)者的提問,并以提攜后起者為樂趣,希望國內(nèi)的門戶實(shí)施少一些“豆腐渣”工程,我們愿貢獻(xiàn)一點(diǎn)力量。
您可以通過zhengwp@cn.ibm.com 或者 zhengwenping@126.com 與SagFox SoftWare取得聯(lián)系。本文作者的msn是: zhengwp@cn.ibm.com
聯(lián)系客服