java單點登錄的實現 --摘自 http://blog.163.com/litianyichuanqi@126/blog/static/11597944120121119163128/
java單點登錄的實現 ??
2012-02-11 09:19:00 |??分類: Java |??標簽: java??web單點登錄?? | 字號大中小 ? 訂閱
在門戶項目中,經常會遇到如何實現單點登錄的問題,下面就本人的經驗做個總結。歡迎大家進行補充討論。單點登錄的具體實現有很多種選擇,包括:
1.?????? 采用專門的 SSO 商業軟件: 主要有: Netgrity 的 Siteminder ,已經被 CA 收購。 Novell 公司的 iChain 。 RSA 公司的 ClearTrust 等。
2.?????? 采用門戶產品供應商自己的 SSO 產品,如: BEA 的 WLES , IBM 的 Tivoli Access Manager , Sun 公司的 identity Server , Oracle 公司的 OID 等。
3.?????? 這些商業軟件一般適用于客戶對 SSO 的需求很高,并且企業內部采用 COTS 軟件如: Domino,SAP,Sieble 的系統比較多的情況下采用。并結合身份管理。統一認證等項目采用。采用這些軟件一般都要對要集成的系統做些改造,如在要集成的系統上安裝 AGENT 。現在一般只提供常見軟件如: Domino,SAP,Sieble ,常見應用服務器: weblogic,websphere 等的 AGENT 。要先統一這些系統的認證。一般采用 LDAP 或 數據庫 。然后才能實現 SSO 。比較麻煩。
4.?????? 另外,如果不想掏銀子,也有 OPEN SOURCE 的 SSO 軟件可選:主要有: http://www.josso.org/ https://opensso.dev.java.net/ http://www.sourceid.org 等。具體怎么樣就不清楚了。
?
如果項目對 SSO 的要求比較低,又不想對要被集成的系統做任何改動,可采用下面介紹的方式簡單實現:下面我們通過一個例子來說明。假如一個門戶項目要對下面的幾個系統做 SSO 。
?

?
?
用戶在這些系統中的用戶名,密碼各不相同,如:員工號為001的員工在這些系統中的用戶名,密碼分別如下:
?
![]() | |||
首先,建立員工在PORTAL系統中的用戶名和其他系統中的用戶名之間的對應關系
?
首先,要建立員工在PORTAL系統中的用戶名和其他系統中的用戶名之間的對應關系并保存。可保存在表中或LDAP中或文件系統中。當然要考慮這些系統之間的數據同步問題。比較好的方式是找到用戶在這些系統中的都存在的唯一信息(如員工號,MAIL地址,姓名等)。通過唯一信息實時到各個系統中去取認證所需要的信息。就不需要考慮數據同步問題。比較實用。可以建立類似下面的表:密碼可采用加密保存。如果是采用BEA的Weblogic Portal,可采用UUP來保存這些信息。

通過IFRAME或超連接方式集成目標系統,并進行SSO通過IFRAME或超連接方式集成目標系統,并在URL中帶上用戶名和密碼。如集成DOMINO可采用如下方式:width=" >或:Href src=“http:// host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf”以上采用的是在HTTP中直接傳遞明碼,為提高安全性,可采用HTTPS來傳遞用戶名和密碼。另外采用這種方式被集成的系統必須支持FORM方式認證。J2EE應用,DOMINO等都支持FORM認證。這兩種方式如果SSO成功,就自動進入目標系統的界面,如果實現會顯示目標系統的登錄界面。其效果圖如下:
?

?

以上這種實現方式,一般需要瀏覽器支持COOKIE,所以要注意瀏覽器的配置,在開發階段,為方便調試,可設置IE,讓它顯示COOKIE的名稱。如下所示:
?

采用這種方式,對要集成的系統不需要做任何的改動。如果PORTAL系統中的用戶在被集成的系統中的權限都一樣,可采用建立一個通用用戶的做法。也就是所有在PORTAL系統中的用戶都采用這個通用用戶進入目標系統。這種方式等于是采用頁面集成方式做集成。比較方便使用。另外,有時候需要采用調用API,或配置Adapter等應用集成方式來集成其他系統,一般也是通過定義一個連接專用的用戶。在API中或在配置Adapter的時候寫死。如采用JAVA API方式集成DOMINO:
lotus.domino.Session dominoSession = NotesFactory.createSession(dominoServer, “admin”, “password”);
CS結構實現方式
經常有人問CS結構的應用如何實現SSO,本人的建議是對這種系統不要自己去實現SSO。很麻煩,其實輸個用戶名,密碼沒什么大不了的。如果要實現,一是采用商業軟件。另外也可以采用以下方式:在PORTAL的PORTLET上建立超連接。并通過APPLET方式啟動CS結構的應用系統的登錄界面。然后通過如下的方式把用戶名/密碼傳遞過去。-不能做任何改動的客戶端- WIN消息(給登錄窗口發送用戶名,密碼等登錄所需要的信息),模擬鍵盤(java有模擬鍵盤輸入的API)
-可以做改動的客戶端- 參數傳遞,并讓登錄的EXE文件讀取參數進行認證。因為要讓APPLET執行本地的EXE文件,所以必須對IE中的JRE的安全進行設置。
?

其他:在采用以上方式實現了SSO后,要注意LOGOUT,可采用與LOGIN相同的方式。也可以通過被集成系統的超時設置來實現。
單點登錄SSO技術資料收集
·???????? 統一用戶認證和單點登錄解決方案: 計算機世界網上的文章,比較全面的介紹統一用戶認證和單點登錄解決方案
·???????? 惠普靈動單點登錄(SSO)解決方案: 包括C/S結構的系統單點登錄解決方案
·???????? 網站用戶單點登錄系統解決方案: 通過令牌方式實現網站用戶單點登錄
·???????? WebLogic平臺的Web SSO(SAML)解決方案: 在WebLogic 8.1SP4中,提供了用于和Microsoft Windows客戶端進行SSO的Single Pass Negotiate Identity Assertion Provider。本文對其做了詳細的介紹。
·???????? http://blog.beijingnet.com/index.php?blogId=4: 收錄了一些SSO方面的文章
·???????? 應用整合中SSO的技術實現: 作者介紹了南京地稅進行應用整合SSO的技術實現方案