《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > 基于Cookie的單點(diǎn)登錄技術(shù)

基于Cookie的單點(diǎn)登錄技術(shù)

2009-07-10
作者:鐘衛(wèi)東

  摘 要: 在基于Web的多種應(yīng)用系統(tǒng)中需要統(tǒng)一身份認(rèn)證和資源訪問(wèn)控制機(jī)制,采用基于Cookie的單點(diǎn)登錄系統(tǒng)是一種很好的解決方案,它是一種基于HTTP重定向和票據(jù),并以跨域Cookie的共享為核心的集中式認(rèn)證系統(tǒng)。
??? 關(guān)鍵詞: Cookie;單點(diǎn)登錄;跨域認(rèn)證

?

  隨著信息技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,企業(yè)信息化建設(shè)已經(jīng)進(jìn)入了快速發(fā)展的階段,隨著企業(yè)信息化過(guò)程的不斷深化,Web應(yīng)用系統(tǒng)規(guī)模也不斷擴(kuò)大。大量Web應(yīng)用系統(tǒng)在辦公自動(dòng)化中得到廣泛應(yīng)用。每個(gè)應(yīng)用系統(tǒng)出于安全因素考慮都建立了登錄模塊,用戶訪問(wèn)不同的應(yīng)用系統(tǒng)需要多次輸入用戶名和口令,使用非常不便,工作效率低下;而且眾多的用戶名和密碼增加了系統(tǒng)管理的負(fù)擔(dān);用戶名和密碼的冗余存儲(chǔ)造成了資源浪費(fèi);另外用戶為了便于記憶常常會(huì)使用簡(jiǎn)單口令或相同口令,頻繁的輸入也大大增加了口令被非法截獲和破解的幾率。這些都會(huì)降低Web應(yīng)用系統(tǒng)的安全性。
  如何實(shí)現(xiàn)方便快捷、管理輕松、成本低、安全性高的認(rèn)證已經(jīng)成為當(dāng)前企業(yè)Web應(yīng)用中亟待解決的問(wèn)題之一。建立一個(gè)跨平臺(tái)、跨應(yīng)用的基礎(chǔ)性服務(wù)系統(tǒng),將企業(yè)中各個(gè)應(yīng)用系統(tǒng)的身份認(rèn)證獨(dú)立出來(lái),進(jìn)行集中統(tǒng)一管理,是解決上述問(wèn)題行之有效的方法。每個(gè)用戶只需要一套用戶名和口令,進(jìn)行一次身份驗(yàn)證,就可以對(duì)所授權(quán)的所有信息系統(tǒng)進(jìn)行無(wú)縫訪問(wèn)。從而提高辦公效率、方便系統(tǒng)管理、降低使用成本、提升企業(yè)Web的整體安全。這種解決方案就是單點(diǎn)登錄SSO(Single Sign On),單點(diǎn)登錄在企業(yè)Web系統(tǒng)中的應(yīng)用,對(duì)于推動(dòng)網(wǎng)絡(luò)辦公自動(dòng)化的普及和發(fā)展具有十分重要的作用。
1 Cookie概述
1.1? Cookie的定義及功能

  Cookie是用戶在瀏覽網(wǎng)頁(yè)頁(yè)面時(shí),服務(wù)器發(fā)送給瀏覽器的體積很小的純文本信息,它保存在客戶機(jī)的內(nèi)存中,或作為文件保存在客戶機(jī)的硬盤(pán)中,用戶以后訪問(wèn)同一個(gè)Web服務(wù)器時(shí)瀏覽器會(huì)把它們?cè)瓨影l(fā)送給服務(wù)器。通過(guò)讓服務(wù)器讀取它原先保存到客戶端的信息,網(wǎng)站能夠?yàn)闉g覽者提供一系列的方便。目前,Cookie已廣泛應(yīng)用于Web應(yīng)用中,如Microsoft的Passport 單點(diǎn)登錄服務(wù)就是借助于Cookie完成的。
1.2? Cookie的組成
  Cookie由變量名和值組成。其屬性里既有標(biāo)準(zhǔn)的Cookie變量,也有用戶自己創(chuàng)建的變量,屬性中變量是用“變量=值”形式來(lái)保存。
  Cookie的基本格式如下:
  NAME=VALUE;expires=Date;Path=PATH;
  Domain=DOMAIN_NAME;Secure
  其中各項(xiàng)以“;”分開(kāi),首先是指定Cookie的名稱,并為其賦值。接下來(lái)分別是Cookie的有效期、URL路徑以及域名,在這幾項(xiàng)中,除了第一項(xiàng)以外,其它部分均為可選項(xiàng)。
  (1)NAME=VALUE是每一個(gè)Cookie均必須有的部分。NAME是該Cookie的名稱,VALUE是該Cookie的值。在字符串“NAME=VALUE”中,不含分號(hào)、逗號(hào)和空格等字符。如NAME是role_cookie,其VALUE是manager。
  (2)Expires=DATE:Expires變量是一個(gè)只寫(xiě)變量,它確定了Cookie有效終止日期。該變量可省,如果缺省時(shí),則Cookie的屬性值不會(huì)保存在用戶的硬盤(pán)中,而僅僅保存在內(nèi)存當(dāng)中,Cookie文件將隨著瀏覽器的關(guān)閉而自動(dòng)消失。
  (3)Domain=DOMAIN_NAME:Domain是Cookie在其內(nèi)有效的主機(jī)或域名。Domain確定了哪些lnternet域中的Web服務(wù)器可讀取瀏覽器所存取的Cookie,即只有來(lái)自這個(gè)域的頁(yè)面才可以使用Cookie中的信息。這項(xiàng)設(shè)置是可選的,缺省時(shí),設(shè)置Cookie的屬性值為該Web服務(wù)器的域名。
  (4)Path=PATH:Path定義了Web服務(wù)器上哪些路徑下的頁(yè)面可獲取服務(wù)器設(shè)置的Cookie。該項(xiàng)設(shè)置同樣是可選的,如果缺省時(shí),則Path的屬性值為Web服務(wù)器傳給瀏覽器的資源的路徑名??梢钥闯鼋柚鷮?duì)Domain和Path兩個(gè)變最的設(shè)置,即可有效地控制Cookie文件被訪問(wèn)的范圍。
  (5)Secure:在Cookie中標(biāo)記該變量,表明只有當(dāng)瀏覽器和Web Server之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí),瀏覽器才向服務(wù)器提交相應(yīng)的Cookie。當(dāng)前這種協(xié)議只有一種,即為HTTPS。
1.3? Cookie的使用
  有兩種方式使用Cookie,一是當(dāng)用戶用瀏覽器首次訪問(wèn)某Web站點(diǎn)(Web服務(wù)器)時(shí),服務(wù)器端先用Set-Cookie header來(lái)創(chuàng)建一個(gè)Cookie,再用Response命令將Cookie寫(xiě)入訪問(wèn)者的計(jì)算機(jī),此過(guò)程稱作創(chuàng)建Cookie;二是當(dāng)用戶用瀏覽器再次訪問(wèn)此Web站點(diǎn)時(shí),用Request命令從訪問(wèn)者的計(jì)算機(jī)中以忽略路徑的方式取回Cookie,此過(guò)程稱作讀取Cookie。
2?單點(diǎn)登錄的關(guān)鍵技術(shù)
2.1?單域單點(diǎn)登錄
  單域單點(diǎn)登錄指只有一個(gè)服務(wù)實(shí)體域,所有屬于該域的服務(wù)實(shí)體都信任這個(gè)機(jī)構(gòu)所認(rèn)證過(guò)的用戶,某一用戶在成功登錄單域中的任意一臺(tái)Web服務(wù)實(shí)體以后,繼續(xù)訪問(wèn)同一服務(wù)實(shí)體不需要再次經(jīng)過(guò)認(rèn)證,并且訪問(wèn)同一域的其他Web服務(wù)實(shí)體,也不需要經(jīng)過(guò)認(rèn)證。
  采用Cookie技術(shù)解決SSO主要過(guò)程描述如下:
  首先用戶通過(guò)客戶端瀏覽器,向應(yīng)用服務(wù)器請(qǐng)求訪問(wèn)和使用受保護(hù)的資源,應(yīng)用服務(wù)器分析請(qǐng)求,檢查這個(gè)用戶是否有已經(jīng)創(chuàng)建好的有效的Cookie,其中包含有效的用戶SSO票據(jù)。如果沒(méi)有有效的Cookie,則應(yīng)用服務(wù)器將用戶的Web瀏覽器重定向到登錄服務(wù)器。若驗(yàn)證成功,登錄服務(wù)器產(chǎn)生一個(gè)有效的Cookie,其中包含有效的用戶SSO票據(jù)。為安全起見(jiàn),一般要對(duì)此Cookie中的信息進(jìn)行加密處理。登錄服務(wù)器將含有SSO票據(jù)的Cookie發(fā)送給用戶的Web瀏覽器,并將用戶的Web瀏覽器重定向到原先請(qǐng)求的資源,向應(yīng)用服務(wù)器再次請(qǐng)求訪問(wèn)和使用已申請(qǐng)的資源。驗(yàn)證成功,則向用戶提供所請(qǐng)求的資源;若驗(yàn)證不成功,則拒絕用戶訪問(wèn)所請(qǐng)求的資源或提示用戶重新登錄。圖1顯示了單點(diǎn)登錄訪問(wèn)流程。

2.2?跨域單點(diǎn)登錄
  Cookie的存取只對(duì)同一域下的主機(jī)有效,分布式應(yīng)用系統(tǒng)往往不能保證所有的主機(jī)都在同一域下。當(dāng)用戶登錄加入SSO認(rèn)證體系里的一臺(tái)服務(wù)器時(shí),例如服務(wù)器A,客戶機(jī)瀏覽器可以將獲得的登錄用戶票據(jù)記錄到本地Cookie中,當(dāng)此客戶機(jī)轉(zhuǎn)而訪問(wèn)服務(wù)器B的時(shí)候,為了實(shí)現(xiàn)單點(diǎn)登錄,服務(wù)器B必須要獲得標(biāo)識(shí)用戶登錄狀態(tài)的票據(jù)作為憑證來(lái)進(jìn)行驗(yàn)證,而此票據(jù)存儲(chǔ)于先前訪問(wèn)服務(wù)器A時(shí)留下的Cookie,此Cookie只對(duì)來(lái)自服務(wù)器A域里的訪問(wèn)有效,為獲取訪問(wèn)其他域主機(jī)的Cookie,必需實(shí)現(xiàn)跨域共享Cookie。
  假設(shè)處于不同域下的服務(wù)器A和服務(wù)器B聯(lián)合組成的網(wǎng)絡(luò)應(yīng)用需要統(tǒng)一的用戶認(rèn)證,客戶機(jī)曾在服務(wù)器A進(jìn)行了訪問(wèn),并且在本地保存了服務(wù)器A的Cookie,圖2顯示了客戶機(jī)在訪問(wèn)服務(wù)器B的時(shí)候共享服務(wù)器A的Cookie的過(guò)程。

  共享網(wǎng)跨域單點(diǎn)登錄系統(tǒng)的登錄及認(rèn)證過(guò)程涉及客戶機(jī)、數(shù)據(jù)中心和登錄認(rèn)證中心(CA)三個(gè)角色之間的交互。采用Cookie技術(shù)解決跨域SSO主要過(guò)程描述如下:
  (1)客戶機(jī)訪問(wèn)某一數(shù)據(jù)中心網(wǎng)站的受保護(hù)資源,單點(diǎn)登錄模塊首先接管請(qǐng)求,查詢客戶機(jī)是否持有本數(shù)據(jù)中心的Cookie,并試圖獲取其中的訪問(wèn)票據(jù)。如果客戶機(jī)可以提供,說(shuō)明用戶曾經(jīng)以合法身份訪問(wèn)過(guò)此數(shù)據(jù)中心,并且尚未在本地注銷(xiāo),轉(zhuǎn)向(4);否則,要通過(guò)共享跨域的Cookie來(lái)確定是否進(jìn)行全局登錄,進(jìn)行(2)。
  (2)這個(gè)步驟的主要工作是跨域獲取Cookie。客戶機(jī)瀏覽器被重定向到登錄認(rèn)證中心,CA試圖獲取存儲(chǔ)于客戶機(jī)的Cookie,如果不存在,說(shuō)明用戶尚未全局登錄,轉(zhuǎn)向(3);否則,從Cookie中獲取票據(jù)。然后CA將客戶機(jī)瀏覽器重定向回原先訪問(wèn)的數(shù)據(jù)中心,數(shù)據(jù)中心獲取票據(jù)和返回地址,把票據(jù)寫(xiě)入客戶端Cookie并跳轉(zhuǎn)到返回地址,然后進(jìn)行(1)。
  (3)重定向客戶機(jī)瀏覽器到CA上的登錄頁(yè)面,認(rèn)證中心獲取登錄用戶名和密碼并將其與用戶信息庫(kù)信息核對(duì),進(jìn)行用戶身份確認(rèn)。如果沒(méi)有這個(gè)用戶或密碼錯(cuò)誤,直接返回登錄失?。蝗绻?yàn)證成功,隨機(jī)生成標(biāo)識(shí)此用戶登錄的唯一票據(jù),并生成一個(gè)條目放入用戶信息庫(kù)中,并把票據(jù)存入客戶機(jī)的Cookie中。然后,通過(guò)跨域Cookie共享機(jī)制,把此票據(jù)轉(zhuǎn)入客戶機(jī)所訪問(wèn)的數(shù)據(jù)中心,將臺(tái)寫(xiě)到客戶機(jī)的Cookie中,用戶完成登錄,轉(zhuǎn)向(1)進(jìn)行資源訪問(wèn)。
  (4)客戶機(jī)用票據(jù)來(lái)訪問(wèn)認(rèn)證中心的用戶狀態(tài)查詢服務(wù),認(rèn)證中心訪問(wèn)用戶信息庫(kù)確定該用戶是否依然處于登錄狀態(tài)。如果處于登錄狀態(tài)則將用戶名和用戶的訪問(wèn)級(jí)別返回?cái)?shù)據(jù)中心,允許用戶訪問(wèn)數(shù)據(jù)資源。否則,然后轉(zhuǎn)向(3),提示用戶輸入用戶名和密碼。
  在本方案的整個(gè)流程中,除了最初輸入的用戶名和密碼外,其他所傳輸?shù)亩际瞧睋?jù),最后客戶機(jī)拿此票據(jù)獲取登錄用戶的用戶名,從而結(jié)束認(rèn)證過(guò)程。
3 安全性分析
????? 保存有用戶SSO票據(jù)的Cookie需要在客戶端和服務(wù)器端來(lái)回傳遞,而一般情況下,在傳輸信道中Cookie是以明文形式傳輸?shù)?,本身也不能提供完整性等安全?yàn)證機(jī)制,而且它在客戶端也是明文存儲(chǔ)的,因此存在較大的安全隱患。因此,在認(rèn)證系統(tǒng)中,需要有相應(yīng)的安全措施,來(lái)保護(hù)Cookie的安全性。
  (1)重放攻擊。在本方案中每個(gè)Cookie均由產(chǎn)生者加上唯一的ID域和時(shí)間戳域,可以抵御重放攻擊。
  (2)消息篡改。因?yàn)镃ookie存放在客戶端瀏覽器中,雖然Cookie技術(shù)本身具備防止非授權(quán)服務(wù)器端篡改的手段,但是目前也發(fā)現(xiàn)可以通過(guò)偽造DNS域名來(lái)進(jìn)行篡改。在本方案中,每個(gè)發(fā)布的Cookie均由發(fā)布者進(jìn)行數(shù)字簽名,各模塊在使用這些Cookie時(shí),首先簽證數(shù)字簽名的值是否正確,如果數(shù)字簽名值為非法,那么拒絕該Cookie。這樣就可以完全杜絕Cookie被篡改的情況發(fā)生。
  (3)竊聽(tīng)及中間人攻擊。這種攻擊是指認(rèn)證過(guò)程的信息被他人查看,進(jìn)而進(jìn)行分析,最后將自己的數(shù)據(jù)替代原始數(shù)據(jù)。只要防止Cookie被其他人隨意查看和分析,即可抵御該種攻擊??梢栽诒痉桨钢幸朊荑€的分配和管理系統(tǒng),對(duì)系統(tǒng)中的各模塊分配密鑰和定時(shí)更新密鑰。在認(rèn)證過(guò)程中,對(duì)各種Cookie中的關(guān)鍵域值進(jìn)行對(duì)稱加密,防止中間人讀取有效的數(shù)據(jù)。
  企業(yè)單點(diǎn)登錄方案將企業(yè)內(nèi)部相對(duì)獨(dú)立分散的網(wǎng)絡(luò)應(yīng)用系統(tǒng)進(jìn)一步得到了統(tǒng)一,消除了企業(yè)信息化孤島和數(shù)據(jù)冗余等問(wèn)題,有效地實(shí)現(xiàn)了數(shù)據(jù)共享,使一個(gè)用戶只要驗(yàn)證一次即可訪問(wèn)多個(gè)應(yīng)用系統(tǒng),解決了困擾單位內(nèi)部不同部門(mén)應(yīng)用系統(tǒng)重復(fù)登錄和反復(fù)認(rèn)證的難題,整個(gè)過(guò)程對(duì)于用戶來(lái)說(shuō)是透明的,不需要改變?cè)械臉I(yè)務(wù)流程。這樣既方便了用戶使用,又提高了網(wǎng)絡(luò)辦公的工作效率。當(dāng)然,Cookie的使用需要注意安全問(wèn)題,要采用相應(yīng)的安全技術(shù)。

參考文獻(xiàn)
[1] 陳旭暉,林世平,莊世芳,等.基于Web服務(wù)的單點(diǎn)登錄系統(tǒng).福建電腦,2006,3.
[2] 孫雷.基于網(wǎng)格的Web Services技術(shù)分析及單點(diǎn)登錄問(wèn)題探討[J].中國(guó)科技信息,2005.
[3] 邱航,權(quán)勇.基于Kerberos的單點(diǎn)登錄系統(tǒng)研究與設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。