本發(fā)明屬于計算機應(yīng)用技術(shù)領(lǐng)域,特別涉及一種面向系統(tǒng)集成的跨域單點登錄方法。
背景技術(shù):
系統(tǒng)集成時需要將多個獨立子系統(tǒng)集中管理,子系統(tǒng)之間單獨開發(fā),每個子系統(tǒng)都使用各自的登錄功能,因此用戶在多個子系統(tǒng)間切換時,需要多次輸入用戶名和密碼,這嚴(yán)重地影響了用戶的使用體驗,同時也給用戶帶來管理眾多賬號密碼的壓力。
單點登錄技術(shù)就是為了解決上述系統(tǒng)集成時存在的問題,用戶在系統(tǒng)平臺下的任一子系統(tǒng)登錄后,再訪問其他子系統(tǒng)都不需要再次輸入用戶名密碼。該技術(shù)將身份驗證和權(quán)限管理的工作全部交由單點登錄服務(wù)完成,這樣保證了用戶的認證工作全部后臺實現(xiàn),對用戶靜默,實現(xiàn)了系統(tǒng)間無縫切換,這極大地提升了用戶的使用體驗。
在系統(tǒng)集成時,即存在一些已使用很久的老系統(tǒng),也存在新開發(fā)系統(tǒng)。在集成這些系統(tǒng)時會存在以下問題:
(1)部分系統(tǒng)已提供登錄功能,部分并沒有登錄入口。
(2)不同子系統(tǒng)可能部署在不同域下。
(3)不同子系統(tǒng)可能使用不同的開發(fā)語言開發(fā)實現(xiàn)。
另外系統(tǒng)還存在維護方已不再維護的情況,無法更改源代碼,因此一種支持跨域、跨開發(fā)平臺且使用簡單、不侵入原有系統(tǒng)的單點登錄方法及其重要。本發(fā)明就是基于這種需求而開發(fā)的一種面向系統(tǒng)集成的跨域單點登錄方法。
跨域單點登錄的技術(shù)核心在認證信息多系統(tǒng)共享,目前主要有三種實現(xiàn)方式:第一,采用共享Session技術(shù)實現(xiàn)認證信息共享或通過Cookie記錄認證信息;第二,通過令牌適配器,將域內(nèi)令牌認證生成跨域令牌;第三,在集成門戶中生成特殊URL,以此來傳遞認證信息。其中,第一種方法時效性控制存在限制,且需要侵入原系統(tǒng);第二種方法,每次訪問時都需驗證,驗證服務(wù)器壓力較大;第三種方法,對用戶限制較大,所有操作需在集成門戶上進行。
技術(shù)實現(xiàn)要素:
發(fā)明目的:針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明提供一種配置簡單不侵入原系統(tǒng)代碼,且支持跨域分布在多個域名下的系統(tǒng)也可實現(xiàn)無縫訪問,還具有適用于高并發(fā)場景、支持限時免登陸特性的面向系統(tǒng)集成的跨域單點登錄方法。
技術(shù)方案:為解決上述技術(shù)問題,本發(fā)明提供一種面向系統(tǒng)集成的跨域單點登錄方法,包括如下步驟:
步驟一:代理服務(wù)接收用戶向子系統(tǒng)發(fā)出的請求,并檢驗該用戶授權(quán)碼,如果沒有攜帶授權(quán)碼則判斷該用戶是首次訪問子系統(tǒng)并進入步驟二,如果攜帶授權(quán)碼則判斷該用戶不是首次訪問子系統(tǒng)并進入步驟三;
步驟二:代理服務(wù)將請求重定向到單點登錄服務(wù)的統(tǒng)一登錄界面并進入步驟四;
步驟三:判斷用戶不是首次訪問子系統(tǒng)后,訪問代理服務(wù)獲得授權(quán)碼并進入步驟六,如果訪問代理服務(wù)的授權(quán)碼緩存中沒有找到該授權(quán)碼信息,則以RPC協(xié)議并加密的方式向單點登錄服務(wù)授權(quán)碼驗證模塊發(fā)出驗證請求,若驗證通過則訪問代理服務(wù)保存該授權(quán)碼,否則將重定向到統(tǒng)一登錄界面并進入步驟二;
步驟四:用戶在單點登錄服務(wù)的統(tǒng)一登錄界面填寫用戶名、密碼、是否免登陸;然后對于用戶信息進行驗證;
步驟五:用戶信息驗證通過后,通過授權(quán)碼生成模塊生成唯一授權(quán)碼,使用模擬登陸實現(xiàn)所有子系統(tǒng)的登錄,并將授權(quán)碼發(fā)送到各個子系統(tǒng)的代理服務(wù);
步驟六:對授權(quán)碼進行驗證,如果驗證通過進入步驟七,如果驗證不通過則拋棄該授權(quán)碼并重新定向到統(tǒng)一登錄界面返回步驟四;
步驟七:通過訪問代理服務(wù)緩存該授權(quán)碼,并在用戶端生成含有授權(quán)碼的Cookie;
步驟八:用戶成功訪問子系統(tǒng),實現(xiàn)單點登錄。
進一步的,所述授權(quán)碼生成模塊使用GUID生成全局唯一授權(quán)碼,授權(quán)碼管理模塊以<用戶名,授權(quán)碼,生成時間,存活時間>的格式保存。
進一步的,所述步驟四中的免登陸最高可達30天。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于:
本發(fā)明使用的是基于代理服務(wù)的請求轉(zhuǎn)發(fā)技術(shù)、模擬登錄技術(shù)、認證信息緩存來完成跨域單點登錄,具有不侵入原有系統(tǒng)、適用于高并發(fā)場景、對用戶操作無限制的優(yōu)點。
本發(fā)明使用訪問代理、模擬登錄及緩存授權(quán)碼的思想,發(fā)明了一種面向系統(tǒng)集成的跨域單點登錄方法,該方法配置簡單不侵入原系統(tǒng)代碼,且支持跨域分布在多個域名下的系統(tǒng)也可實現(xiàn)無縫訪問,因此特別適用于跨域、跨開發(fā)平臺的系統(tǒng)集成需求。另外由于緩存授權(quán)碼,該方法還具有適用于高并發(fā)場景、支持限時免登陸的特性。
附圖說明
圖1是本發(fā)明的流程圖;
圖2是具體實施例中訪問代理服務(wù)與子系統(tǒng)關(guān)系圖;
圖3為具體實施例中用戶首次訪問第一個子系統(tǒng)的流程圖;
圖4為具體實施例中單點登錄服務(wù)登錄流程圖;
圖5為具體實施例中用戶首次登錄其他系統(tǒng)時流程圖。
具體實施方式
下面結(jié)合附圖和具體實施方式,進一步闡明本發(fā)明。
本發(fā)明在每個系統(tǒng)之上部署訪問代理服務(wù),訪問代理與系統(tǒng)在同一域名之下,且不侵入原有系統(tǒng)代碼、不更改原有系統(tǒng)配置。用戶向系統(tǒng)發(fā)出的請求首先需要通過訪問代理服務(wù),由訪問代理服務(wù)負責(zé)請求的處理工作,當(dāng)用戶并無法感知到訪問代理服務(wù)的存在。
當(dāng)用戶首次向系統(tǒng)發(fā)出訪問請求時,訪問代理服務(wù)將用戶訪問的資源重定向到單點登錄服務(wù)器的統(tǒng)一登錄界面,用戶輸入正確的用戶名密碼之后,單點登錄服務(wù)器的授權(quán)碼生成模塊授予該用戶唯一授權(quán)碼,該授權(quán)碼用于其他系統(tǒng)校驗該用戶是否成功登錄。
單點登錄系統(tǒng)部署時,需要為每個系統(tǒng)設(shè)置登錄接口。登錄接口分為兩種,第一種是系統(tǒng)原生登錄接口,自帶登錄功能的系統(tǒng)必須設(shè)置這種接口;另外一種為訪問代理服務(wù)中的登錄接口,全部系統(tǒng)都需要設(shè)置這種接口。當(dāng)用戶成功登錄后,單點登錄服務(wù)器返回登錄成功界面,在該界面完成模擬登錄操作,該操作對用戶不可見。成功登錄界面,會生成數(shù)個不可見的iframe框架,該框架的URL為單點登錄服務(wù)器根據(jù)用戶信息和子系統(tǒng)登錄接口生成。當(dāng)所有iframe訪問成功后,界面會自動跳轉(zhuǎn)到用戶請求的URL。URL為第二種登錄接口的iframe,會攜帶授權(quán)碼向代理訪問層發(fā)出請求,代理訪問層根據(jù)請求信息,使用加密通道再次向單點登錄服務(wù)器發(fā)出驗證請求,驗證成功后生成帶有授權(quán)碼信息的Cookie并將登錄信息以<用戶名,授權(quán)碼,生成時間,存活時間>的格式保存在本機。
用戶再次訪問該系統(tǒng)或其他系統(tǒng)時,發(fā)出的請求會攜帶授權(quán)碼,代理服務(wù)層將該授權(quán)碼與自身保存的授權(quán)碼進行比對。當(dāng)相同時,代理服務(wù)層轉(zhuǎn)發(fā)此次請求到子系統(tǒng);當(dāng)不同時,則請求重定向到統(tǒng)一登錄界面;當(dāng)不存在時,使用加密通道向單點登錄服務(wù)發(fā)起驗證請求。
用戶向系統(tǒng)發(fā)出的請求,訪問代理服務(wù)驗證通過后,將該請求發(fā)送給其代理的系統(tǒng),并將系統(tǒng)的回復(fù)信息全部返還給用戶。
如圖1所示,本發(fā)明包括如下步驟:
步驟一:代理服務(wù)接收用戶向子系統(tǒng)發(fā)出的請求,并檢驗該用戶授權(quán)碼,如果沒有攜帶授權(quán)碼則判斷該用戶是首次訪問子系統(tǒng)并進入步驟二,如果攜帶授權(quán)碼則判斷該用戶不是首次訪問子系統(tǒng)并進入步驟三;
步驟二:代理服務(wù)將請求重定向到單點登錄服務(wù)的統(tǒng)一登錄界面并進入步驟四;
步驟三:判斷用戶不是首次訪問子系統(tǒng)后,訪問代理服務(wù)獲得授權(quán)碼并進入步驟六,如果訪問代理服務(wù)的授權(quán)碼緩存中沒有找到該授權(quán)碼信息,則以RPC協(xié)議并加密的方式向單點登錄服務(wù)授權(quán)碼驗證模塊發(fā)出驗證請求,若驗證通過則訪問代理服務(wù)保存該授權(quán)碼,否則將重定向到統(tǒng)一登錄界面并進入步驟二;
步驟四:用戶在單點登錄服務(wù)的統(tǒng)一登錄界面填寫用戶名、密碼、是否免登陸;然后對于用戶信息進行驗證;免登陸最高可達30天。
步驟五:用戶信息驗證通過后,通過授權(quán)碼生成模塊生成唯一授權(quán)碼,使用模擬登陸實現(xiàn)所有子系統(tǒng)的登錄,并將授權(quán)碼發(fā)送到各個子系統(tǒng)的代理服務(wù);所述授權(quán)碼生成模塊使用GUID生成全局唯一授權(quán)碼,授權(quán)碼管理模塊以<用戶名,授權(quán)碼,生成時間,存活時間>的格式保存;
步驟六:對授權(quán)碼進行驗證,如果驗證通過進入步驟七,如果驗證不通過則拋棄該授權(quán)碼并重新定向到統(tǒng)一登錄界面返回步驟四;
步驟七:通過訪問代理服務(wù)緩存該授權(quán)碼,并在用戶端生成含有授權(quán)碼的Cookie;
步驟八:用戶成功訪問子系統(tǒng),實現(xiàn)單點登錄。
如圖2所示,在子系統(tǒng)前部署訪問代理服務(wù),訪問代理服務(wù)與子系統(tǒng)處于同一頂級域下。代理訪問層可以為任一編程語言實現(xiàn),且不侵入子系統(tǒng),包括不侵入子系統(tǒng)配置。訪問代理服務(wù)可以在不關(guān)閉子系統(tǒng)的情況下部署,部署前需要在其配置文件中配置子系統(tǒng)的編碼、二級域名、單點登錄服務(wù)地址等配置項。部署訪問代理服務(wù)后,對外公開的子系統(tǒng)地址改為代理訪問層地址。
如圖3所示,當(dāng)用戶首次訪問第一個子系統(tǒng)時,系統(tǒng)的實現(xiàn)步驟如下:
(1)用戶向子系統(tǒng)發(fā)起請求,訪問代理服務(wù)首先接受到該請求。
(2)該請求沒有攜帶授權(quán)碼,因此訪問代理服務(wù)將請求重定向到單點登錄服務(wù)的統(tǒng)一登錄界面。
(3)用戶在登錄界面正確填寫信息后,單點登錄服務(wù)登錄成功界面向訪問代理服務(wù)和子系統(tǒng)(存在第一種登錄接口)發(fā)送登錄信息,登錄信息包括用戶信息和授權(quán)碼。然后界面跳轉(zhuǎn)至用戶初始請求的URL。
(4)訪問代理服務(wù)將請求轉(zhuǎn)發(fā)給子系統(tǒng)。
(5)子系統(tǒng)處理請求后,發(fā)送回復(fù)信息給訪問代理服務(wù)
(6)訪問代理服務(wù)將子系統(tǒng)的回復(fù)轉(zhuǎn)發(fā)給用戶。
如圖4所示,用戶在統(tǒng)一登錄界面登錄后,單點登錄系統(tǒng)經(jīng)過驗證、模擬登錄等流程后完成用戶的單點登錄,其具體步驟為:
(1)用戶在單點登錄服務(wù)的統(tǒng)一登錄界面填寫用戶名、密碼、是否免登陸,其中設(shè)置為免登錄可保證30天內(nèi)的免登陸。
(2)用戶信息驗證通過后,統(tǒng)一登錄模塊向授權(quán)碼生成模塊請求全局唯一授權(quán)碼。
(3)授權(quán)碼生成模塊使用GUID生成全局唯一授權(quán)碼,授權(quán)碼管理模塊以<用戶名,授權(quán)碼,生成時間,存活時間>的格式保存,然后啟動定時器定時清理已過時的用戶登錄信息。
(4)統(tǒng)一登錄接口將登錄信息發(fā)送到模擬登錄系統(tǒng),該系統(tǒng)以網(wǎng)頁形式向用戶展示登錄成功界面
(5)在登錄成功界面生成數(shù)個不可見的iframe框架,在這些框架中進行模擬登錄操作。
(6)訪問代理服務(wù)根據(jù)模擬登錄系統(tǒng)獲得用戶授權(quán)碼,但此處獲得的授權(quán)碼是使用未加密方式獲得的,因此需要向單點登錄服務(wù)進行驗證。訪問代理服務(wù)使用RPC協(xié)議并加密地向授權(quán)碼管理模塊進行驗證,當(dāng)驗證通過時以<用戶名,授權(quán)碼,生成時間,存活時間>的格式保存在本機,然后啟動定時器定時清理已過時的用戶登錄信息,若沒有通過驗證則拋棄該授權(quán)碼并重定向到統(tǒng)一登錄界面。
其中步驟5的更詳細實施方式為:
(1)單點登錄系統(tǒng)部署時,為每個系統(tǒng)設(shè)置單獨的登錄接口。登錄接口分為兩種,第一種是系統(tǒng)原生登錄接口,自帶登錄功能的系統(tǒng)必須設(shè)置這種接口;另外一種為訪問代理服務(wù)中的登錄接口,全部系統(tǒng)都需要設(shè)置這種接口。
(2)從數(shù)據(jù)庫中獲取用戶具有訪問權(quán)限的子系統(tǒng)信息。
(3)成功登錄界面,根據(jù)步驟2的返回結(jié)果和用戶信息生成數(shù)個不可見的iframe框架,該框架的URL為單點登錄服務(wù)器根據(jù)用戶信息和具有子系統(tǒng)登錄接口生成。當(dāng)所有iframe訪問完成后,界面會自動跳轉(zhuǎn)到用戶請求的URL。
(4)URL為第二種登錄接口的iframe,會攜帶授權(quán)碼向代理訪問層發(fā)出請求,代理訪問層根據(jù)請求信息,生成帶有授權(quán)碼信息的Cookie。
如圖5所示,當(dāng)用戶訪問第二個子系統(tǒng)時,會攜帶授權(quán)碼向訪問代理服務(wù)發(fā)出驗證,其具體步驟為:
(1)用戶向子系統(tǒng)2發(fā)出請求,訪問代理服務(wù)首先接收該請求,并獲得授權(quán)碼。
(2)訪問代理服務(wù)如果沒有在自身找到該授權(quán)碼信息,則以RPC協(xié)議并加密的方式向單點登錄服務(wù)授權(quán)碼驗證模塊發(fā)出驗證請求。
(3)若驗證通過則訪問代理服務(wù)保存該登錄信息,否則將重定向到統(tǒng)一登錄界面。
(4)訪問代理服務(wù)將請求轉(zhuǎn)發(fā)給子系統(tǒng)。
(5)子系統(tǒng)處理請求后,發(fā)送回復(fù)信息給訪問代理服務(wù)
(6)訪問代理服務(wù)將子系統(tǒng)的回復(fù)轉(zhuǎn)發(fā)給用戶。
以上所述僅為本發(fā)明的實施例子而已,并不用于限制本發(fā)明,本發(fā)明對于數(shù)值計算中研究對象的精確顯示尤其適用。凡在本發(fā)明的原則之內(nèi),所作的等同替換,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。本發(fā)明未作詳細闡述的內(nèi)容屬于本專業(yè)領(lǐng)域技術(shù)人員公知的已有技術(shù)。