文|暢文丁
隨著信息化的迅猛發(fā)展,政府企事業(yè)單位和機構(gòu)不斷地基于Internet/Intranet建設(shè)業(yè)務(wù)信息系統(tǒng),而這些業(yè)務(wù)系統(tǒng)都要求實現(xiàn)用戶管理、身份認證、授權(quán)等必不可少的安全措施,新建系統(tǒng)與已有系統(tǒng)的繼承或融合上,特別是針對相同的用戶群會帶來以下的問題:1、多個用戶管理和身份認證系統(tǒng)會增加整個信息系統(tǒng)的管理工作成本;2、用戶需要記憶多個賬號和口令,使用極為不便;3、無法實現(xiàn)統(tǒng)一認證和單點登錄,影響系統(tǒng)間資源整合的效果,也無法統(tǒng)一實施安全策略;4、無法統(tǒng)一分析用戶應(yīng)用行為。解決以上問題有必要建設(shè)統(tǒng)一用戶管理和認證平臺實現(xiàn)統(tǒng)一用戶管理、統(tǒng)一認證、單點登錄、多點漫游便于安全管理、運維管理和用戶使用。下面結(jié)合實際工作經(jīng)驗,針對應(yīng)用系統(tǒng)與統(tǒng)一認證平臺集成方案中比較常見的正向代理和反向代理技術(shù)談一談兩者的實現(xiàn)原理和比較:
1、正向代理技術(shù)或者叫代理插件技術(shù)(agent plugin), 在集成實施的時候需要部署在應(yīng)用軟件前端的Web服務(wù)器上,以HTTP Server插件的方式進行部署。對于后臺應(yīng)用的訪問,會由代理插件進行攔截,然后再進行認證和授權(quán)的動作(見圖1)。

圖1 正向代理的集成方式示意圖
用戶通過瀏覽器訪問統(tǒng)一門戶,登錄系統(tǒng),登錄請求首先發(fā)送到認證中心,進行統(tǒng)一的用戶認證,認證通過后再攜帶SSOUser信息對各應(yīng)用系統(tǒng)進行訪問。具體實現(xiàn)步驟為:
(1)用戶請求訪問業(yè)務(wù)系統(tǒng),填寫用戶名和密碼;
(2)代理程序?qū)⒂脩籼顚懙挠脩裘兔艽a發(fā)送到統(tǒng)一認證中心;
(3)統(tǒng)一認證中心驗證用戶信息的有效性,若有效,則生成一個SSOUser信息給用戶;
(4)用戶攜帶SSOUser信息去訪問系統(tǒng),匹配相應(yīng)的操作權(quán)限;
(5)用戶完成此次操作任務(wù);
(6)用戶操作完畢,退出登錄。
在正向代理集成方案中,各應(yīng)用系統(tǒng)均部署認證中心的代理插件,插件的作用主要為應(yīng)用系統(tǒng)與認證中心的通信和數(shù)據(jù)傳輸,攔截用戶對應(yīng)用的請求,根據(jù)不同的請求,觸發(fā)不同的行為,比如判斷用戶提交的用戶名和密碼,獲取后發(fā)送至認證中心進行認證。JAVA平臺的代理形式通常為部署JAR包,主要邏輯由JAR包中的filter執(zhí)行,.NET平臺插件介質(zhì)形式通常為DLL文件,主要邏輯由HttpModule及其調(diào)用的類執(zhí)行。
2、反向代理方式需要部署在獨立的服務(wù)器上,對于應(yīng)用的訪問會集中到反向代理所在的服務(wù)器,然后再進行認證和授權(quán)的動作。

圖2 反向代理的集成方式示意圖
用戶訪問應(yīng)用系統(tǒng)首先要訪問反向代理服務(wù)器,代理服務(wù)器接收到訪問請求后到源服務(wù)器上獲取內(nèi)容,把內(nèi)容返回給用戶。統(tǒng)一認證反向服務(wù)器通常包括認證模塊,反向代理模塊和緩存,認證模塊負責訪問認證中心,獲取認證結(jié)果;反向代理主要進行地址轉(zhuǎn)換,將反向代理服務(wù)器中目錄映射到需要被代理的服務(wù)器上;緩存保存用戶訪問過的內(nèi)容。具體實現(xiàn)步驟如下:
(1)用戶通過瀏覽器訪問web服務(wù)器,web服務(wù)器將請求遞交給反向服務(wù)器;
(2)用戶提交用戶名口令給反向代理服務(wù)器;
(3)反向代理服務(wù)器通過認證模塊訪問認證中心,驗證合法性;
(4)用戶通過認證后,認證系統(tǒng)形成一個憑證(token);
(5)認證中心通知反向代理服務(wù)器認證結(jié)果;
(6)反向代理從緩存或通過請求重定向到web服務(wù)器取回頁面和數(shù)據(jù)轉(zhuǎn)發(fā)給用戶,訪問流程結(jié)束。
當用戶登錄A系統(tǒng)web服務(wù)器成功后,登錄其他系統(tǒng)服務(wù)器時,反向代理服務(wù)器認證模塊從cookie中取得認證憑證,發(fā)送到認證中心驗證有效性,如有效可以繼續(xù)訪問,如無效則提示用戶重新進行認證。
正向代理的典型用途是為在防火墻內(nèi)的局域網(wǎng)客戶端提供訪問Internet的途徑。正向代理還可以使用緩沖特性減少網(wǎng)絡(luò)使用率。反向代理的典型用途是將防火墻后面的服務(wù)器提供給Internet用戶訪問。反向代理還可以為后端的多臺服務(wù)器提供負載平衡,或為后端較慢的服務(wù)器提供緩沖服務(wù)。另外,反向代理還可以啟用高級URL策略和管理技術(shù),從而使處于不同web服務(wù)器系統(tǒng)的web頁面同時存在于同一個URL空間下。
從集成部署上看,正向代理方式需要在應(yīng)用系統(tǒng)安裝代理插件,應(yīng)用系統(tǒng)還需做一定的定制改造,反向代理方式通常無需應(yīng)用系統(tǒng)進行開發(fā)改造。因此相對來說正向代理是一種緊耦合式的集成方式,反向代理為一種松耦合的集成方式。
由于正向代理方式在應(yīng)用系統(tǒng)端安裝了代理插件,系統(tǒng)與認證中心的通信及有關(guān)邏輯處理由插件來完成,因此正向代理方式效率和性能相對反向代理方式較高,反向代理方式對代理服務(wù)器的性能要求較高,若應(yīng)用系統(tǒng)較多,訪問量較大時此處容易形成瓶頸。
正向代理較反向代理技術(shù)相對成熟。
反向代理方式通過瀏覽器傳遞了認證憑證,一定程度上存在著被攔截的安全隱患。還有反向代理方式使用統(tǒng)一的用戶名密碼只能通過統(tǒng)一的門戶登錄認證代理服務(wù)器不能通過原系統(tǒng)登錄入口實現(xiàn)認證,如果認證服務(wù)器已經(jīng)認證過的用戶在其自身業(yè)務(wù)系統(tǒng)中的密碼修改了,那么如果用以前的密碼在認證服務(wù)器上登錄也可能正常登錄,這需要一定的機制加以解決。
統(tǒng)一認證集成方案中正向代理方式和反向代理方式各有利弊,正向代理技術(shù)較反向代理技術(shù)更為成熟。在企業(yè)局域網(wǎng)內(nèi)的可做少量改造的應(yīng)用系統(tǒng)建議采用正向代理技術(shù),若原系統(tǒng)不能改造或自身認證授權(quán)體系較復雜且存在B/S、c/s混用的系統(tǒng)建議采用反向代理技術(shù)進行集成。