趙向梅
(西安歐亞學(xué)院 信息工程學(xué)院,陜西 西安 710065)
基于Java EE的單點(diǎn)登錄技術(shù)研究與實(shí)現(xiàn)
趙向梅
(西安歐亞學(xué)院 信息工程學(xué)院,陜西 西安 710065)
文章針對(duì)多個(gè)應(yīng)用系統(tǒng)的復(fù)雜登錄問(wèn)題,介紹了單點(diǎn)登錄系統(tǒng),并闡述了單點(diǎn)登錄的幾種模型分類,在此基礎(chǔ)上重點(diǎn)介紹了基于Cookie機(jī)制的單點(diǎn)登錄和基于SAML的單點(diǎn)登錄?;谶@兩種實(shí)現(xiàn)方式,本文進(jìn)行了單點(diǎn)登錄系統(tǒng)設(shè)計(jì)與仿真實(shí)現(xiàn),證明所實(shí)現(xiàn)的系統(tǒng)能夠解決當(dāng)前web應(yīng)用系統(tǒng)面臨的登錄問(wèn)題。
身份認(rèn)證;單點(diǎn)登錄;SAML;Cookie
隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,企業(yè)內(nèi)部眾多業(yè)務(wù)相關(guān)的應(yīng)用系統(tǒng)越來(lái)越多。一般每個(gè)應(yīng)用系統(tǒng)都有自己獨(dú)立的用戶數(shù)據(jù),并進(jìn)行獨(dú)立的身份認(rèn)證服務(wù)。這樣用戶就需要記住多個(gè)用戶名和密碼,導(dǎo)致常常發(fā)生用戶名混淆或者忘記密碼等現(xiàn)象。為了解決多個(gè)應(yīng)用系統(tǒng)的復(fù)雜登錄問(wèn)題,誕生了單點(diǎn)登錄的身份認(rèn)證技術(shù)。
通過(guò)單點(diǎn)登錄技術(shù),在一個(gè)業(yè)務(wù)相關(guān)的多應(yīng)用系統(tǒng)平臺(tái)中,用戶只在某個(gè)應(yīng)用中進(jìn)行一次身份認(rèn)證,就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。這不僅改善了用戶的使用體驗(yàn),提高了工作效率,并且可以提高整個(gè)系統(tǒng)的安全性。
當(dāng)前網(wǎng)上存在的應(yīng)用系統(tǒng),單點(diǎn)登錄已經(jīng)成為不可缺少的需求。但目前的應(yīng)用系統(tǒng)及網(wǎng)站和相應(yīng)的商用服務(wù)技術(shù)各異,這使得單點(diǎn)登錄系統(tǒng)通用性較低。實(shí)現(xiàn)單點(diǎn)登錄的技術(shù)有很多,有基于經(jīng)紀(jì)人、基于代理人、基于網(wǎng)關(guān)、基于Cookie及基于SAML等,針對(duì)不同架構(gòu)系統(tǒng)使用不同的認(rèn)證方式。
基于經(jīng)紀(jì)人單點(diǎn)登錄技術(shù),其工作原理是:用戶在訪問(wèn)應(yīng)用系統(tǒng)之前向認(rèn)證服務(wù)器進(jìn)行身份驗(yàn)證;當(dāng)用戶通過(guò)身份驗(yàn)證后,認(rèn)證服務(wù)器返回給用戶一個(gè)電子身份標(biāo)識(shí),用戶通過(guò)該電子身份標(biāo)識(shí)去訪問(wèn)其他應(yīng)用系統(tǒng),從而實(shí)現(xiàn)單點(diǎn)登錄。其中,有一個(gè)集中的認(rèn)證和用戶賬戶管理的服務(wù)器。認(rèn)證服務(wù)器即“經(jīng)紀(jì)人”,對(duì)提出請(qǐng)求用戶的身份進(jìn)行存取。
在基于代理人的單點(diǎn)登錄技術(shù),有一個(gè)代理程序自動(dòng)地為不同的應(yīng)用程序進(jìn)行用戶身份認(rèn)證。被稱為“代理”的程序可以運(yùn)行在客戶端或者服務(wù)器上,作為用戶與應(yīng)用服務(wù)器之間的通信中轉(zhuǎn)站。代理程序會(huì)記錄用戶在各個(gè)應(yīng)用系統(tǒng)的密碼,當(dāng)用戶要訪問(wèn)某個(gè)應(yīng)用系統(tǒng)時(shí),代理程序把相應(yīng)的密碼自動(dòng)發(fā)送給這個(gè)應(yīng)用系統(tǒng),代替用戶進(jìn)行登錄。
基于網(wǎng)關(guān)的單點(diǎn)登錄提供類似像“門”一樣的網(wǎng)關(guān),用來(lái)安全的接入到可信的網(wǎng)絡(luò)服務(wù)。主要由三部分組成:網(wǎng)關(guān)、客戶端、應(yīng)用服務(wù)器。客戶端通過(guò)網(wǎng)關(guān)進(jìn)行認(rèn)證后,獲得訪問(wèn)應(yīng)用服務(wù)器的授權(quán),應(yīng)用服務(wù)器集中在被網(wǎng)關(guān)隔離的受限網(wǎng)段里,網(wǎng)關(guān)把外界的客戶端和內(nèi)部的服務(wù)器隔離開(kāi)來(lái)。
基于Cookie的單點(diǎn)登錄技術(shù)是一種基于HTTP重定向和票據(jù)的集中式認(rèn)證方式,在 Web領(lǐng)域較常使用Cookie認(rèn)證機(jī)制。目前大多數(shù)企業(yè)中存在眾多基于Web的應(yīng)用系統(tǒng),各個(gè)應(yīng)用系統(tǒng)一般都有自己獨(dú)立的門戶網(wǎng)站和平臺(tái),可考慮利用Cookie在不同站點(diǎn)的傳遞機(jī)制。因?yàn)镃ookie技術(shù)結(jié)合了企業(yè)要求具有的方便靈活、低成本的特點(diǎn)。
2.1 Cookie認(rèn)證方式
基于 Cookie的認(rèn)證方式中,所有參與單點(diǎn)登錄的應(yīng)用系統(tǒng)訪問(wèn)要求采用域名,并且要屬于同一個(gè) DNS域。 所有應(yīng)用系統(tǒng)的登錄認(rèn)證都通過(guò)統(tǒng)一認(rèn)證中心來(lái)實(shí)現(xiàn),應(yīng)用系統(tǒng)可以直接把本系統(tǒng)的登錄頁(yè)面重定向到認(rèn)證中心的登錄頁(yè)面,待用戶身份認(rèn)證通過(guò)后,用戶的相關(guān)信息加密后由認(rèn)證中心以 Cookie方式傳給客戶端瀏覽器,并重定向回各應(yīng)用系統(tǒng)。各應(yīng)用系統(tǒng)分析從瀏覽器傳過(guò)來(lái)的所有 Cookie,并提取相應(yīng)Cookie值進(jìn)行解密。根據(jù)解密后的值對(duì)用戶的身份進(jìn)行認(rèn)證,認(rèn)證如果通過(guò),則允許用戶訪問(wèn)本系統(tǒng),否則導(dǎo)向到統(tǒng)一認(rèn)證中心進(jìn)行登錄。
如下圖1所示,用戶通過(guò)瀏覽器訪問(wèn)應(yīng)用系統(tǒng)A,A系統(tǒng)驗(yàn)證用戶身份,驗(yàn)證通過(guò)則直接進(jìn)入 A系統(tǒng),用戶的相關(guān)信息則加密后生成Token,由認(rèn)證中心以 Cookie方式傳給客戶端瀏覽器;頁(yè)面重定向回應(yīng)用系統(tǒng)B,應(yīng)用系統(tǒng)B分析從瀏覽器傳過(guò)來(lái)的Cookie,并提取相應(yīng)值進(jìn)行解密,進(jìn)行身份認(rèn)證后實(shí)現(xiàn)登錄。這個(gè)過(guò)程中無(wú)需統(tǒng)一的驗(yàn)證服務(wù)器,各個(gè)服務(wù)器都通過(guò)統(tǒng)一的密鑰對(duì)Token進(jìn)行加密解密。
圖1 基于Cookie單點(diǎn)登錄流程圖Fig.1 Based on the cookie flow chart of signal sign-on(sso)
2.2 基于Cookie單點(diǎn)登錄流程
如上圖1所示,用戶先后訪問(wèn)了應(yīng)用系統(tǒng)A和B。其中,用戶訪問(wèn)應(yīng)用系統(tǒng)B時(shí),不需要輸入用戶名和密碼,此次訪問(wèn)過(guò)程完成了單點(diǎn)登錄功能。用戶訪問(wèn)應(yīng)用系統(tǒng)B的流程如圖2所示。
圖2 用戶訪問(wèn)應(yīng)用系統(tǒng)B的流程圖Fig.2 User access application system flowchart B
圖2 中,標(biāo)示的數(shù)字表明了單點(diǎn)登錄的具體操作步驟:1)用戶訪問(wèn)應(yīng)用系統(tǒng)B時(shí),在瀏覽器地址欄輸入應(yīng)用系統(tǒng)B的URL地址;2)系統(tǒng)會(huì)檢查本地是否有用戶的認(rèn)證信息,如果沒(méi)有用戶認(rèn)證信息,應(yīng)用系統(tǒng)會(huì)將重定向的認(rèn)證中心地址返回給用戶;3)用戶訪問(wèn)認(rèn)證中心的地址,因?yàn)槭堑诙卧L問(wèn),所以會(huì)攜帶cookie;4)認(rèn)證中心會(huì)檢查cookie,數(shù)據(jù)庫(kù)中如果查詢到cookie,就表明認(rèn)證成功。認(rèn)證中心返回用戶重定向的應(yīng)用系統(tǒng)B的URL地址,同時(shí)攜帶ticket;5)瀏覽器訪問(wèn)重定向的應(yīng)用系統(tǒng)B的地址,同時(shí)攜帶ticket信息;6)應(yīng)用系統(tǒng)B獲取ticket后,向?qū)傩灾行淖鰐icket的用戶屬性查詢;7)屬性中心從數(shù)據(jù)庫(kù)查詢后,將查詢結(jié)果返回給應(yīng)用系統(tǒng)B,應(yīng)用系統(tǒng)B依據(jù)此屬性值做出允許或者拒絕訪問(wèn)的授權(quán)。
SAML(Security Assertion Markup Language)是一種基于XML的開(kāi)放標(biāo)準(zhǔn),基于SAML可以很好的實(shí)現(xiàn)單點(diǎn)登錄。在基于SAML的單點(diǎn)登錄方案中,用戶、服務(wù)提供方、身份認(rèn)證方可以通過(guò)SAML標(biāo)準(zhǔn),進(jìn)行安全高效的認(rèn)證和授權(quán)數(shù)據(jù)。SAML定義了斷言、協(xié)議及約束[2]。
3.1 SAM L規(guī)范
SAML規(guī)范體系[4]如圖3所示。SAML斷言,由信任域內(nèi)的身份認(rèn)證機(jī)構(gòu)發(fā)布,是對(duì)用戶或者計(jì)算機(jī)的安全信息的XML描述。斷言有身份認(rèn)證斷言、授權(quán)決策斷言和屬性斷言3種類型。
圖3 SAML規(guī)范體系Fig.3 The SAML specification system
在斷言基礎(chǔ)上,協(xié)議定義SAML如何請(qǐng)求和接收斷言。SAML請(qǐng)求可以請(qǐng)求生成一個(gè)具體的斷言,也可用來(lái)進(jìn)行認(rèn)證、屬性和授權(quán)的查詢,而生成傳輸所需斷言。
約束定義了SAML斷言傳輸過(guò)程中使用的傳輸協(xié)議。例如SOAP/HTTP,約束在基于HTTP的SOAP傳輸協(xié)議下,這是目前最常用的。
3.2 SAM L系統(tǒng)組成
基于SAML的單點(diǎn)登錄系統(tǒng)主要由4個(gè)部分組成[5]:1)用戶注冊(cè)。完成新用戶的注冊(cè)功能;2)認(rèn)證服務(wù)。驗(yàn)證用戶名和密碼,產(chǎn)生SAML斷言,傳輸返回給用戶認(rèn)證信息;3)SAML響應(yīng)服務(wù)。接收SAML請(qǐng)求,提取并分析認(rèn)證信息,發(fā)送SAML斷言;4)單點(diǎn)登錄管理。獲取用戶的認(rèn)證信息,發(fā)送身份驗(yàn)證請(qǐng)求,接收響應(yīng),驗(yàn)證SAML斷言進(jìn)行授權(quán)決策。
通過(guò)以上單點(diǎn)登錄技術(shù)研究,下面仿真實(shí)現(xiàn)一個(gè)簡(jiǎn)單的單點(diǎn)登錄系統(tǒng)。借助實(shí)驗(yàn)室服務(wù)器,配置jdk1.7及tomcat7.0,完成環(huán)境搭建,運(yùn)用Java語(yǔ)言進(jìn)行編程。功能主要分為4個(gè)方面:網(wǎng)關(guān),客戶端、統(tǒng)一身份認(rèn)證中心、服務(wù)器。網(wǎng)關(guān)用于把未被認(rèn)證的用戶重定向到身份認(rèn)證中心;統(tǒng)一身份認(rèn)證中心負(fù)責(zé)為合法用戶生成認(rèn)證斷言、響應(yīng)斷言查詢請(qǐng)求等;服務(wù)器用于對(duì)應(yīng)用系統(tǒng)的訪問(wèn)進(jìn)行管控,與認(rèn)證中心交互用戶信息等;客戶端主要是發(fā)送用戶的請(qǐng)求[6]。
系統(tǒng)基于cookie和SAML技術(shù)實(shí)現(xiàn),實(shí)現(xiàn)后,用戶在瀏覽器輸入應(yīng)用系統(tǒng)A地址http://localhost:8080/test1,訪問(wèn)應(yīng)用系統(tǒng)A,此時(shí)需要認(rèn)證,輸入用戶名和密碼,點(diǎn)擊提交后,會(huì)產(chǎn)生相應(yīng)的cookie和ticket,用戶成功訪問(wèn)應(yīng)用系統(tǒng)A。用戶在訪問(wèn)了應(yīng)用系統(tǒng)A后,如果繼續(xù)訪問(wèn)應(yīng)用系統(tǒng)B,在瀏覽器輸入網(wǎng)址:http://localhost:8080/test2,即可成功訪問(wèn),不需要再輸入用戶名和密碼。之后在有效時(shí)間內(nèi),無(wú)論訪問(wèn)系統(tǒng)A還是B,均不需要再次輸入用戶名和密碼。
認(rèn)證中心是本次實(shí)現(xiàn)的主要一部分,此部分代碼名稱為L(zhǎng)oginServlet.java。主要功能是對(duì)已認(rèn)證的用戶創(chuàng)建cookie并且重定向ticket到相應(yīng)的應(yīng)用。該文件為servlet文件,主要是通過(guò)一個(gè)方法doGet完成。該方法的主要代碼如下:
文中對(duì)當(dāng)下企業(yè)內(nèi)部常用的單點(diǎn)登錄技術(shù)進(jìn)行了分析和研究,主要闡述了基于Cookie和基于SAML的單點(diǎn)登錄技術(shù),最后使用以上技術(shù)仿真實(shí)現(xiàn)了單點(diǎn)登錄系統(tǒng)。本文在仿真過(guò)程中是通過(guò)自己做的網(wǎng)站來(lái)模擬單點(diǎn)登錄系統(tǒng),后續(xù)研究中如果需要直接在云計(jì)算實(shí)際應(yīng)用上部署,以驗(yàn)證其可靠性。參考文獻(xiàn):
[1]Security Assertion Markup Language.In Wikipedia[EB/OL].http://en.wikipedia.Org/wiki/SAML.
[2]Amazon web services.Amazon Elastic Compute Cloud[EB/OL].http://aws.amazon.com/documentation/ec2/,June 01, 2012/June 07,2012.
[3]王小紅.基于 Cookie的單點(diǎn)登錄認(rèn)證機(jī)制實(shí)現(xiàn)[J].重慶工商大學(xué)學(xué)報(bào):自然科學(xué)版,2014,31(8):74-76.WANG Xiao-hong.Implementation mechanism for single sign-on authentication based on Cookie[J].Chongqing Technol Business Univ:Nat Sci Ed,2014,31(8):7
[4]劉浩.基于SAML的安全管理系統(tǒng)單點(diǎn)登錄技術(shù)研究[D].北京:北京交通大學(xué),2014.
[5]OASIS Security Services(SAML)TC[EB/OL].https://www.oasis-open.org/committees/tc_home.phpwg_abbrev=security.
[6]房晶.云計(jì)算的虛擬化安全和單點(diǎn)登錄研究[D].北京:北京交通大學(xué),2011.
Research and implementation of single sign-on technology based on Java EE
ZHAO Xiang-mei
(School of Information Engineering,Xi’an Eurasia University,Xi’an 710065,China)
The paper based on the complex of multiple application login problems,introduced single sign-on (sso)system,and then expounds the cookies and the SAML based single sign-on technology.Based on the above two kinds of single sign-on technology,this paper has carried on the single sign-on system design and simulation.It was proved that the system can realize solutions to the current web application login problems.
identity authentication;Single sign-on(sso);SAML;Cookie
TN929.53
A
1674-6236(2015)10-0138-03
2014-11-17 稿件編號(hào):201411123
陜西省教育廳科學(xué)研究計(jì)劃項(xiàng)目(14JK2074)
趙向梅(1980—),女,陜西鳳翔人,碩士,講師。研究方向:計(jì)算機(jī)應(yīng)用。