作者: 鄭 文 平 (2005.08)
内容簡介:
本文首先讨論了什麼是單點登入,然後分别介紹內建 IBM 的産品( Lotus Notes )和非 IBM 産品 (指運作在 WebLogic , Tomcat 等伺服器上的業務系統)兩類企業及應用,我們的重點在于後者。也就是說,主要解決以下幾個問題:
1. 什麼是單點登入 ( Single SignOn ),為什麼要 SSO 。
2. Portal 與 OA 的 SSO 。
3. Portal 與普通企業及應用內建的 SSO 。這個問題是本文的核心,我們将分以下幾部分來介紹:
內建企業級應用程式業務系統的原理
第一部分 什麼是單點登入 ?
一、概述: Single Sign On (SSO)
嚴格地說,單點登入指的是允許使用者登入到一個應用,這個應用帶有經過認證的到其他應用的通路途徑, 登入到這個應用之後,使用者無需再遭遇任何其他的認證。用更實際的話來說,它包括可以将這次主要的登入映射到其他應用中用于同一個使用者的登入的機制。 我們的目标是, SSO 提 供登入到 WebSphere Portal 的能力,并允許使用那些使用者憑證通路 Domino 環境、 Domino 、 Sametime 、 QuickPlace 以及其他基 于 Domino 的工具;允許使用者通路自己權限以内的所有企業及應用,即:運作在普通應用程式伺服器上的各種業務系 統。例如,運作在 WebLogic 或者 Tomcat 上的 jsp 應用程式,運作在 IIS 上 的 asp,aspx 系統,以及 php 系 統。如果在 WebSphere Portal 和 業務系統之間沒有 SSO 關系的話,那麼使用者每次通路某個包含來自于基于業務系統的應用程式或者服務的資訊的 portlet 時,都需要登入到業務系統環境中。此外,有些 WebSphere Portal API 和服務,比如 人員線上感覺 ,沒有提供登入工具。即使這些服務不提供獨特的登入工具,為了運作它們仍然需要通過 SSO 進行認證。我們以齊魯石化綜合資料平台為例,如果實作了單點登入,那麼,一旦使用者登入進入 Portal 系統,該使用者就可以在不用再次登入的情況下,通路她所擁有權限的、包括 OA 和普通企業即應用程式在内的所有業務系統,如下圖所示:
圖 1—1 Portal 與企業級業務系統實作了 SSO
二、 SSO 的實作
我們還是以齊魯石化綜合資料內建平台為例,改企業現在存在一下四套業 務系統,包括 Lotus Notes 開發的 OA 系統,一套基于 WebLogic 的 jsp 系統,兩套基于 IIS 的 asp 系統,我們就以內建這四套系統為例,簡單介紹 SSO 的實作:
齊魯石化現在這四套系統是:
圖 2-1 齊魯石化現有的應用業務系統
我們将采用如下幾種方式實作 SSO:
1、 統一 LDAP 驗證內建:
圖 2-1 SSO 的第一種方式:統一 LDAP 驗證
我們将四套業務系 統的所有使用者資訊一起放到 LDAP 伺服器内,由 ldap 統 一對四套系統的使用者進行驗證。這樣做比較有利于使用者及權限的管理,但是也存在弊端。這四套系統是有不同的四家 IT 公司開發,使用者資訊放在不同平台的不同資料庫中,而且這四套系統除 OA 外,各有不同的使用者組群,放在一起反而不利于管理。是以,此法 SSO 雖然可行,卻不适合該 Portal 系統。我們不采用這種方法。
2、 基于 Portal 系統 LDAP 的憑證保險庫法
圖 2-2 SSO 的第二種方法:基于 Portal 系統 LDAP 的憑證保險庫法
我們采用 Portal 系統獨立存在的 LDAP ,由這個 LDAP 驗 證 Portal 系統使用者的合法性,一旦驗證通過,使用者就登入進 Portal 系統。然後使用者在給定權限的各個業務系統 Portlet 中存儲在各個業務系統中的使用者資訊, Portal 系統會統一管理這些資訊,然後 自動到各個業務系統的使用者資訊庫中校驗,一旦通過校驗,該 portlet 就能顯示業務系統的 授權資訊。通常我們是在 portlet 中放入一個 Iframe ,使用者在 Portal 系統中通過 portlet 中的這個 Iframe 來通路具體業務系統中的授權資訊。
3、 基于 OA 系統 LDAP 的憑證保險庫法 :
基本上 等同于第二種方法,不過更簡單。 OA 系統是企業内部沒個人都使用的業務系統,而且它已經有一套成熟的 LDAP ,我們不必再為 Portal 建立 LDAP 伺服器,我們可以直接使用 OA 系統的,是以有點麻煩的是,在使用 Portal 系統的時候, OA 必須是開着的,擊是你不使用 OA ,因為認證的時候是到 OA 的 LDAP 服務其中驗證的。其他方面則與第二種方法完全相同。
第二部分、 Portal 與 OA 的 SSO
一、 SSO 是如何工作的 ?
WebSphere Portal 和 Lotus Domino 之間的單點登入是通過一種稱為輕量級第三方認證 (LTPA) 的機制來實作的。 WebSphere 應用伺服器(還包括 WebSphere Portal 和其他任何運作在 WebSphere 環境中的應用程式)和 Domino 都使用 LTPA 。當 LTPA 機制用于由多個伺服器 組成的環境中時,它是通過使用 Domain Cookie 而啟用的。這種經過加密的會 話 cookie 被放置在使用者浏覽器中,并包含了一些資訊, WebSphere 或者 Domino Application 伺服器可以加密這些資訊,并使用這些資訊來說明使用者已經通過該 cookie 所覆寫的 DNS ( Domain Naming Service ,域名服務)域中的認證。
LTPA cookie 包含以下 資訊:
· Cookie 名稱:總是設定為 LtpaToken 。
· 域:設定為 Internet 域,該域由參與單點登入的所有伺服器所共享(例如: mycompany.com )。
· Cookie 到期:設定為當浏覽器的壽命終止時删除該 cookie 。
· 安全:設定為開狀态,以強制使用安全套接字層 (SSL) 。有一個 LTPA 配置有一個設定參 數,使它建立隻通過 SSL 發送的 cookie 。
· Cookie 值:這被設定為 LTPA 标記,接下來會對其進行描述。
LTPA 标記是一個加密的字元串, 它包含以下資訊:
· 使用者資料:一般被設定為使用者 ID ,但也可以是任何用于惟一辨別使用者的使用者資訊。
· 過期時間:與 Cookie 過期不同,這個字段用于強加一個時間限制,時間限制從登入進來的那一刻算起,而不受浏覽器活動或者不活動所影響。這個時間限制是一個可配置的 LTPA 設定,預設情況下為 30 分 鐘。
二、 SSO 的內建效果:
我們可以把整個 OA 系統作為一個整體,即一個 Portlet 內建進 Portal 系統,也可以根據 OA 内不同的檔案資料庫 (.nsf) 俺功能拆分為各個不同的功能單元,每個功能單元作為 一個單獨的 portlet 內建進 Portal 系統。例如,
圖 3-1 将 OA 系統拆分為功能單元獨立內建進 Portal
三、怎樣實作 OA 與 Portal 的 SSO ?
Portal 與 OA 的 SSO 可以通過配置 ltpa 的方法實作。通俗一點講就是:使用者登入 Portal 後, Portal 系統會把使用者登入資訊加密成 ltpa 并存放到某一位置,當使用者繼續通路 OA 中的授權資源時, OA 系統會自動讀取改位置的 ltpa ,讀到并解密後拿到 OA 系統中驗證,如果驗證通過,則顯示給使用者他要的授權資訊。是以要配置 Portal 與 OA 之間的 SSO 非常容易,隻要先将 OA 系統伺服器的 ltpa 導出并存為 .key 檔案,然後導入 Portal 系統所在的伺服器( WebShpere Application Server )中就可以了。
第三部分 Portal 系統與普通應用程式的 SSO
一、概述
WebSphere Portal 提 供了 Credential Vault (憑證保險庫)功能。 Credential Vault 通過 Basic Authentication Header 将使用者名和密碼傳遞給後端應用程式。為了使 Domino 伺服器接受通過這個頭部傳遞進來的憑證,必須将伺服器會話驗證配置為 Single-Server 模式。在 Multi-Server 模 式中,該伺服器将會隻接受通過 LTPA 機制傳遞的憑證。是以,為了與 Domino 應用程式一起使用用于 SSO 的 Credential Vault ,您必須将 Domino 伺服器會話驗證配置為 Single-Server 模式。
要使用 Credential Vault ,使用者需輸入一些憑證,輸入一次就夠了。随後,這些憑證被存放在一個經過加密的資料庫表中,每當用 戶通路該 portlet 時,這些憑證便被傳遞給後端應用程式。要了解關于配置 Credential Vault 的細節,參見 WebSphere Portal InfoCenter 。
二、憑證保險庫實作 SSO 原理
我們以一個最簡單的 SSO 過程為例介紹:
1 .普通業務系統的登入過程:
系統首先提供一個界面讓我們輸入我們在應用程式中的使用者資訊:
… …
<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 .使用者輸入使用者名和密碼後,點選“登入”按鈕,該頁面送出到 form 所對應的 Action ( check_login.jsp )處理,我們看 check_login.jsp 的代碼:
… …
<%
String username=request.getParamenter(“username”);
String password=request.getParamenter(“password”);
……
接下來送出到資料庫驗證使用者資訊的合法 性,如果合法,定位到授權資訊頁面;否則,重定位回到登入頁面 login.jsp 。
%>
3. Portlet 開發中是如何解決這個問題的?
其實起關鍵作用的還是 check_login.jsp 頁面,它需要獲得使用者名和密碼兩個鍵值,然後拿着兩個參數到背景資料庫去驗證。正常登入方式中這兩 個參數是通過 login.jsp 來獲得的。事實上,隻要 portlet 能為該頁面提供這兩個鍵值,也就是先了登入的自動化。而 portlet 要實作這兩個參數的提供是非常簡單的,是以實作單點登入也就非常簡單了。我們可以複制一個 check_login.jsp 檔案,例如 check_portal_login.jsp, 這個頁面的兩個參數是 portlet 提供的。剩下的事完全交給業務系統去處理,頁面流轉和全縣控制都不用我們管了。
三、開發 Portlet 實作 SSO 的方法
1 、 JSP 取值傳送 URL 法。
顧名思義,我們開發一個使用系統專用槽的 portlet ,使用憑證保險庫相關接口在 PortletView.jsp 中取出使用者存儲在憑證保險庫中的鍵值,然後以 URL 的 方式傳送到 Iframe 内。例如:
〉〉〉〉〉〉〉 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% frame2" scrolling="auto" marginwidth="2" height=600></Iframe>
如果使用者已經在憑證高先庫中存儲了鍵值的話,該 portlet 的 view 頁面被初始化時, Iframe 中将顯示使用者成功登入後的授權資訊,也就是實作了 SSO 。
2 、 Class 取值寫 Session 法。
顧名思義,我們在 Portlet 的控制類中取得使用者存儲在憑證保險庫中的鍵值對,并在 PortletView 的 doview() 方法中寫入 Session. 而專為 portal
作者簡介:鄭文平,“神狐”軟體工作室創立者,IBM WebSpher Portal産品開發人員,原北京東華合創軟體院軟體工程師,Portal資訊化專員,長期從事Portal(尤其是IBM Websphere Portal)開發,曾參與并引領了北京馳普企業門戶、山東新汶礦務局遠端排程系統、中國石化齊魯公司綜合資料平台、北京供電局虛拟門戶産品,北京航信企 業門戶等多個Portal項目的開發。
如果您有以下需要,歡迎您與SagFox SoftWare 聯系:
1、如果您的公司有IBM WebSpher Portal 項目需要實施但缺少必需的技術力量,而您又不願安排工程師們邊學習邊開發而影響項目品質,歡迎您把項目外包給 SagFox SoftWare,或者以項目合作的方式聯合開發。
2、如果您們是一個Java 開發者并打算投身Portal領域,歡迎您接受 SagFox SoftWare 針對公司技術人員的開發教育訓練,SagFox SoftWare 同時開展針對個人的技術指導與職業規劃,助您謀得高薪。
3、 如果您是一個娴熟的Portal開發者,歡迎您加盟SagFox SoftWare,我們的團隊正在飛速發展。我們也歡迎入門者加入我們的讨論組,SagFox SoftWare 盡力解答欠成熟開發者的提問,并以提攜後起者為樂趣,希望國内的門戶實施少一些“豆腐渣”工程,我們願貢獻一點力量。
您可以通過 [email protected] 或者 [email protected] 與SagFox SoftWare取得聯系。本文作者的msn是: [email protected]