世事如棋
          Aspire to Professionalism
          posts - 4,  comments - 12,  trackbacks - 0

            在門戶項(xiàng)目中,經(jīng)常會(huì)遇到如何實(shí)現(xiàn)單點(diǎn)登錄的問題,下面就本人的經(jīng)驗(yàn)做個(gè)總結(jié)。歡迎大家進(jìn)行補(bǔ)充討論。

          單點(diǎn)登錄的具體實(shí)現(xiàn)有很多種選擇,包括:

          1. 采用專門的SSO商業(yè)軟件: 主要有:Netgrity的Siteminder,已經(jīng)被CA收購(gòu)。Novell 公司的iChain。RSA公司的ClearTrust等。
          2. 采用門戶產(chǎn)品供應(yīng)商自己的SSO產(chǎn)品,如:BEA的WLES,IBM 的Tivoli Access Manager,Sun 公司的identity Server,Oracle公司的OID等。
          3. 這些商業(yè)軟件一般適用于客戶對(duì)SSO的需求很高,并且企業(yè)內(nèi)部采用COTS軟件如:Domino,SAP,Sieble的系統(tǒng)比較多的情況下采用。并結(jié)合身份管理。統(tǒng)一認(rèn)證等項(xiàng)目采用。采用這些軟件一般都要對(duì)要集成的系統(tǒng)做些改造,如在要集成的系統(tǒng)上安裝AGENT?,F(xiàn)在一般只提供常見軟件如:Domino,SAP,Sieble,常見應(yīng)用服務(wù)器:weblogic,websphere等的AGENT。要先統(tǒng)一這些系統(tǒng)的認(rèn)證。一般采用LDAP或數(shù)據(jù)庫(kù)。然后才能實(shí)現(xiàn)SSO。比較麻煩。
          4. 另外,如果不想掏銀子,也有OPEN SOURCE的SSO軟件可選:主要有:http://www.josso.org/https://opensso.dev.java.net/http://www.sourceid.org 等。具體怎么樣就不清楚了。

            如果項(xiàng)目對(duì)SSO的要求比較低,又不想對(duì)要被集成的系統(tǒng)做任何改動(dòng),可采用下面介紹的方式簡(jiǎn)單實(shí)現(xiàn):下面我們通過一個(gè)例子來說明。假如一個(gè)門戶項(xiàng)目要對(duì)下面的幾個(gè)系統(tǒng)做SSO。

          圖一

            用戶在這些系統(tǒng)中的用戶名,密碼各不相同,如:?jiǎn)T工號(hào)為001的員工在這些系統(tǒng)中的用戶名,密碼分別如下:

          用戶 系統(tǒng) 用戶名 密碼
          001 Portal系統(tǒng) A 1234
          001 郵件系統(tǒng) B 2345
          001 DOMINO系統(tǒng) C AAAA
          001 報(bào)銷系統(tǒng) D CCCC
          001 工資系統(tǒng) E BBBB

          首先,建立員工在PORTAL系統(tǒng)中的用戶名和其他系統(tǒng)中的用戶名之間的對(duì)應(yīng)關(guān)系

            首先,要建立員工在PORTAL系統(tǒng)中的用戶名和其他系統(tǒng)中的用戶名之間的對(duì)應(yīng)關(guān)系并保存??杀4嬖诒碇谢騆DAP中或文件系統(tǒng)中。當(dāng)然要考慮這些系統(tǒng)之間的數(shù)據(jù)同步問題。比較好的方式是找到用戶在這些系統(tǒng)中的都存在的唯一信息(如員工號(hào),MAIL地址,姓名等)。通過唯一信息實(shí)時(shí)到各個(gè)系統(tǒng)中去取認(rèn)證所需要的信息。就不需要考慮數(shù)據(jù)同步問題。比較實(shí)用??梢越㈩愃葡旅娴谋恚好艽a可采用加密保存。如果是采用BEA的Weblogic Portal,可采用UUP來保存這些信息。

          	(
          	
          	user	 varchar2(20),   	/*用戶名*/
          	app_name varchar2(20),  	/*應(yīng)用系統(tǒng)*/
          	architect varchar2(4),  		/*應(yīng)用系統(tǒng)的架構(gòu)BS或CS*/
          	app_company varchar2(50),          /*用戶所屬分公司*/
          	app_department varchar2(50),      /*用戶所在的部門*/
          	app_user varchar2(15),                 /*在該系統(tǒng)中的用戶名*/
          	app_passwd varchar2(15), 	/*在該系統(tǒng)中的密碼*/
          	app_cookie varchar2(30),              /*COOKIE名稱*/
          	form_user varchar2(20),                /*認(rèn)證頁(yè)面中FORM的用戶名字段*/
          	form_passwd varchar2(20),          /*認(rèn)證頁(yè)面中FORM的密碼字段*/
          	app_special  varchar2(20)           /*其他*/
          	);
          

          通過IFRAME或超連接方式集成目標(biāo)系統(tǒng),并進(jìn)行SSO

            通過IFRAME或超連接方式集成目標(biāo)系統(tǒng),并在URL中帶上用戶名和密碼。如集成DOMINO可采用如下方式:

            <IFRAME src=http://host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf
          width="100%" frameborder="0" align="middle" height="100%" hspace="0" marginheight="0" marginwidth="0" scrolling="yes" style="background-color:#f7f7ff;">
          </IFRAME>

            或:
          Href src=“http:// host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf
          以上采用的是在HTTP中直接傳遞明碼,為提高安全性,可采用HTTPS來傳遞用戶名和密碼。另外采用這種方式被集成的系統(tǒng)必須支持FORM方式認(rèn)證。J2EE應(yīng)用,DOMINO等都支持FORM認(rèn)證。

            這兩種方式如果SSO成功,就自動(dòng)進(jìn)入目標(biāo)系統(tǒng)的界面,如果實(shí)現(xiàn)會(huì)顯示目標(biāo)系統(tǒng)的登錄界面。其效果圖如下:

          登錄界面

            這種方式,必須維護(hù)對(duì)應(yīng)關(guān)系表,如上面的sso_info。更好的方式是提供界面,讓最終用戶自己維護(hù)這種對(duì)應(yīng)關(guān)系,可模仿Compoze portlets for lotus的做法,在用戶第一次進(jìn)入要與之做SSO的系統(tǒng)時(shí),如DOMINO系統(tǒng),顯示一個(gè)界面,讓用戶自己輸入他在該系統(tǒng)中的用戶名/密碼等信息。并保存到表中或LDAP等其他數(shù)據(jù)源中。以后用戶要進(jìn)入這些系統(tǒng)時(shí),就直接從表中或其他數(shù)據(jù)源中取用戶的用戶名/密碼等信息,幫助用戶做認(rèn)證。建議采用這種方式。如下圖所示。如果用戶改變了自己在DOMINO系統(tǒng)中的用戶名,密碼。從門戶系統(tǒng)進(jìn)入DOMINO系統(tǒng)時(shí),認(rèn)證會(huì)失敗,就重新顯示類似下面的界面。讓用戶重新輸入他在DOMINO系統(tǒng)中新的用戶名,密碼并保存。

          認(rèn)證失敗

            以上這種實(shí)現(xiàn)方式,一般需要瀏覽器支持COOKIE,所以要注意瀏覽器的配置,在開發(fā)階段,為方便調(diào)試,可設(shè)置IE,讓它顯示COOKIE的名稱。如下所示:

          瀏覽器的配置

            采用這種方式,對(duì)要集成的系統(tǒng)不需要做任何的改動(dòng)。如果PORTAL系統(tǒng)中的用戶在被集成的系統(tǒng)中的權(quán)限都一樣,可采用建立一個(gè)通用用戶的做法。也就是所有在PORTAL系統(tǒng)中的用戶都采用這個(gè)通用用戶進(jìn)入目標(biāo)系統(tǒng)。這種方式等于是采用頁(yè)面集成方式做集成。比較方便使用。另外,有時(shí)候需要采用調(diào)用API,或配置Adapter等應(yīng)用集成方式來集成其他系統(tǒng),一般也是通過定義一個(gè)連接專用的用戶。在API中或在配置Adapter的時(shí)候?qū)懰馈H绮捎肑AVA API方式集成DOMINO:

            lotus.domino.Session dominoSession = NotesFactory.createSession(dominoServer, “admin”, “password”);

          CS結(jié)構(gòu)實(shí)現(xiàn)方式

            經(jīng)常有人問CS結(jié)構(gòu)的應(yīng)用如何實(shí)現(xiàn)SSO,本人的建議是對(duì)這種系統(tǒng)不要自己去實(shí)現(xiàn)SSO。很麻煩,其實(shí)輸個(gè)用戶名,密碼沒什么大不了的。如果要實(shí)現(xiàn),一是采用商業(yè)軟件。另外也可以采用以下方式:在PORTAL的PORTLET上建立超連接。并通過APPLET方式啟動(dòng)CS結(jié)構(gòu)的應(yīng)用系統(tǒng)的登錄界面。然后通過如下的方式把用戶名/密碼傳遞過去。

            -不能做任何改動(dòng)的客戶端 - WIN消息(給登錄窗口發(fā)送用戶名,密碼等登錄所需要的信息),模擬鍵盤(java有模擬鍵盤輸入的API)

            -可以做改動(dòng)的客戶端 - 參數(shù)傳遞,并讓登錄的EXE文件讀取參數(shù)進(jìn)行認(rèn)證。

            因?yàn)橐孉PPLET執(zhí)行本地的EXE文件,所以必須對(duì)IE中的JRE的安全進(jìn)行設(shè)置。

          對(duì)IE中的JRE的安全進(jìn)行設(shè)置

          其他:

            在采用以上方式實(shí)現(xiàn)了SSO后,要注意LOGOUT,可采用與LOGIN相同的方式。也可以通過被集成系統(tǒng)的超時(shí)設(shè)置來實(shí)現(xiàn)。

          單點(diǎn)登錄SSO技術(shù)資料收集

          ?作者簡(jiǎn)介
          dev2dev ID: xcjing,BEA 資深技術(shù)顧問,加入BEA中國(guó)多年,在門戶技術(shù)、RFID解決方案上有著豐富的經(jīng)驗(yàn)。
          dot dot dot

          dot
          ??作者其它文章
          posted on 2006-05-17 22:08 KingWell 閱讀(443) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE 相關(guān)
          歡迎訪問我的網(wǎng)站
          JSF中國(guó)

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          我的資源

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 南木林县| 南开区| 巨鹿县| 石屏县| 铅山县| 佛坪县| 上林县| 青海省| 永吉县| 新泰市| 天峨县| 策勒县| 饶阳县| 诸城市| 成武县| 射洪县| 天峨县| 高安市| 芦溪县| 徐汇区| 伊通| 张掖市| 德保县| 崇明县| 蒲江县| 上杭县| 楚雄市| 文水县| 凤山县| 阳泉市| 清镇市| 天台县| 湖北省| 石家庄市| 宿迁市| 赤壁市| 云林县| 友谊县| 灌云县| 托克托县| 岱山县|