文|暢文丁
隨著信息化的迅猛發(fā)展,政府企事業(yè)單位和機(jī)構(gòu)不斷地基于Internet/Intranet建設(shè)業(yè)務(wù)信息系統(tǒng),而這些業(yè)務(wù)系統(tǒng)都要求實(shí)現(xiàn)用戶管理、身份認(rèn)證、授權(quán)等必不可少的安全措施,新建系統(tǒng)與已有系統(tǒng)的繼承或融合上,特別是針對(duì)相同的用戶群會(huì)帶來以下的問題:1、多個(gè)用戶管理和身份認(rèn)證系統(tǒng)會(huì)增加整個(gè)信息系統(tǒng)的管理工作成本;2、用戶需要記憶多個(gè)賬號(hào)和口令,使用極為不便;3、無法實(shí)現(xiàn)統(tǒng)一認(rèn)證和單點(diǎn)登錄,影響系統(tǒng)間資源整合的效果,也無法統(tǒng)一實(shí)施安全策略;4、無法統(tǒng)一分析用戶應(yīng)用行為。解決以上問題有必要建設(shè)統(tǒng)一用戶管理和認(rèn)證平臺(tái)實(shí)現(xiàn)統(tǒng)一用戶管理、統(tǒng)一認(rèn)證、單點(diǎn)登錄、多點(diǎn)漫游便于安全管理、運(yùn)維管理和用戶使用。下面結(jié)合實(shí)際工作經(jīng)驗(yàn),針對(duì)應(yīng)用系統(tǒng)與統(tǒng)一認(rèn)證平臺(tái)集成方案中比較常見的正向代理和反向代理技術(shù)談一談兩者的實(shí)現(xiàn)原理和比較:
1、正向代理技術(shù)或者叫代理插件技術(shù)(agent plugin), 在集成實(shí)施的時(shí)候需要部署在應(yīng)用軟件前端的Web服務(wù)器上,以HTTP Server插件的方式進(jìn)行部署。對(duì)于后臺(tái)應(yīng)用的訪問,會(huì)由代理插件進(jìn)行攔截,然后再進(jìn)行認(rèn)證和授權(quán)的動(dòng)作(見圖1)。
圖1 正向代理的集成方式示意圖
用戶通過瀏覽器訪問統(tǒng)一門戶,登錄系統(tǒng),登錄請(qǐng)求首先發(fā)送到認(rèn)證中心,進(jìn)行統(tǒng)一的用戶認(rèn)證,認(rèn)證通過后再攜帶SSOUser信息對(duì)各應(yīng)用系統(tǒng)進(jìn)行訪問。具體實(shí)現(xiàn)步驟為:
(1)用戶請(qǐng)求訪問業(yè)務(wù)系統(tǒng),填寫用戶名和密碼;
(2)代理程序?qū)⒂脩籼顚懙挠脩裘兔艽a發(fā)送到統(tǒng)一認(rèn)證中心;
(3)統(tǒng)一認(rèn)證中心驗(yàn)證用戶信息的有效性,若有效,則生成一個(gè)SSOUser信息給用戶;
(4)用戶攜帶SSOUser信息去訪問系統(tǒng),匹配相應(yīng)的操作權(quán)限;
(5)用戶完成此次操作任務(wù);
(6)用戶操作完畢,退出登錄。
在正向代理集成方案中,各應(yīng)用系統(tǒng)均部署認(rèn)證中心的代理插件,插件的作用主要為應(yīng)用系統(tǒng)與認(rèn)證中心的通信和數(shù)據(jù)傳輸,攔截用戶對(duì)應(yīng)用的請(qǐng)求,根據(jù)不同的請(qǐng)求,觸發(fā)不同的行為,比如判斷用戶提交的用戶名和密碼,獲取后發(fā)送至認(rèn)證中心進(jìn)行認(rèn)證。JAVA平臺(tái)的代理形式通常為部署JAR包,主要邏輯由JAR包中的filter執(zhí)行,.NET平臺(tái)插件介質(zhì)形式通常為DLL文件,主要邏輯由HttpModule及其調(diào)用的類執(zhí)行。
2、反向代理方式需要部署在獨(dú)立的服務(wù)器上,對(duì)于應(yīng)用的訪問會(huì)集中到反向代理所在的服務(wù)器,然后再進(jìn)行認(rèn)證和授權(quán)的動(dòng)作。
圖2 反向代理的集成方式示意圖
用戶訪問應(yīng)用系統(tǒng)首先要訪問反向代理服務(wù)器,代理服務(wù)器接收到訪問請(qǐng)求后到源服務(wù)器上獲取內(nèi)容,把內(nèi)容返回給用戶。統(tǒng)一認(rèn)證反向服務(wù)器通常包括認(rèn)證模塊,反向代理模塊和緩存,認(rèn)證模塊負(fù)責(zé)訪問認(rèn)證中心,獲取認(rèn)證結(jié)果;反向代理主要進(jìn)行地址轉(zhuǎn)換,將反向代理服務(wù)器中目錄映射到需要被代理的服務(wù)器上;緩存保存用戶訪問過的內(nèi)容。具體實(shí)現(xiàn)步驟如下:
(1)用戶通過瀏覽器訪問web服務(wù)器,web服務(wù)器將請(qǐng)求遞交給反向服務(wù)器;
(2)用戶提交用戶名口令給反向代理服務(wù)器;
(3)反向代理服務(wù)器通過認(rèn)證模塊訪問認(rèn)證中心,驗(yàn)證合法性;
(4)用戶通過認(rèn)證后,認(rèn)證系統(tǒng)形成一個(gè)憑證(token);
(5)認(rèn)證中心通知反向代理服務(wù)器認(rèn)證結(jié)果;
(6)反向代理從緩存或通過請(qǐng)求重定向到web服務(wù)器取回頁面和數(shù)據(jù)轉(zhuǎn)發(fā)給用戶,訪問流程結(jié)束。
當(dāng)用戶登錄A系統(tǒng)web服務(wù)器成功后,登錄其他系統(tǒng)服務(wù)器時(shí),反向代理服務(wù)器認(rèn)證模塊從cookie中取得認(rèn)證憑證,發(fā)送到認(rèn)證中心驗(yàn)證有效性,如有效可以繼續(xù)訪問,如無效則提示用戶重新進(jìn)行認(rèn)證。
正向代理的典型用途是為在防火墻內(nèi)的局域網(wǎng)客戶端提供訪問Internet的途徑。正向代理還可以使用緩沖特性減少網(wǎng)絡(luò)使用率。反向代理的典型用途是將防火墻后面的服務(wù)器提供給Internet用戶訪問。反向代理還可以為后端的多臺(tái)服務(wù)器提供負(fù)載平衡,或?yàn)楹蠖溯^慢的服務(wù)器提供緩沖服務(wù)。另外,反向代理還可以啟用高級(jí)URL策略和管理技術(shù),從而使處于不同web服務(wù)器系統(tǒng)的web頁面同時(shí)存在于同一個(gè)URL空間下。
從集成部署上看,正向代理方式需要在應(yīng)用系統(tǒng)安裝代理插件,應(yīng)用系統(tǒng)還需做一定的定制改造,反向代理方式通常無需應(yīng)用系統(tǒng)進(jìn)行開發(fā)改造。因此相對(duì)來說正向代理是一種緊耦合式的集成方式,反向代理為一種松耦合的集成方式。
由于正向代理方式在應(yīng)用系統(tǒng)端安裝了代理插件,系統(tǒng)與認(rèn)證中心的通信及有關(guān)邏輯處理由插件來完成,因此正向代理方式效率和性能相對(duì)反向代理方式較高,反向代理方式對(duì)代理服務(wù)器的性能要求較高,若應(yīng)用系統(tǒng)較多,訪問量較大時(shí)此處容易形成瓶頸。
正向代理較反向代理技術(shù)相對(duì)成熟。
反向代理方式通過瀏覽器傳遞了認(rèn)證憑證,一定程度上存在著被攔截的安全隱患。還有反向代理方式使用統(tǒng)一的用戶名密碼只能通過統(tǒng)一的門戶登錄認(rèn)證代理服務(wù)器不能通過原系統(tǒng)登錄入口實(shí)現(xiàn)認(rèn)證,如果認(rèn)證服務(wù)器已經(jīng)認(rèn)證過的用戶在其自身業(yè)務(wù)系統(tǒng)中的密碼修改了,那么如果用以前的密碼在認(rèn)證服務(wù)器上登錄也可能正常登錄,這需要一定的機(jī)制加以解決。
統(tǒng)一認(rèn)證集成方案中正向代理方式和反向代理方式各有利弊,正向代理技術(shù)較反向代理技術(shù)更為成熟。在企業(yè)局域網(wǎng)內(nèi)的可做少量改造的應(yīng)用系統(tǒng)建議采用正向代理技術(shù),若原系統(tǒng)不能改造或自身認(rèn)證授權(quán)體系較復(fù)雜且存在B/S、c/s混用的系統(tǒng)建議采用反向代理技術(shù)進(jìn)行集成。