摘要:采用HTTPS和傳統遠程腳本來實現身份認證存在一些缺點。在分析了Ajax技術特點后,提出了一種輕量級基于Ajax的適合中小企業Web應用開發的身份認證方法。同時設計了實現該方法的模型,并分析了該方法的安全性和特點。
關鍵詞:身份認證;Ajax;輕量級
中圖分類號:TP393.08文獻標志碼:A
文章編號:1001-3695(2007)07-0135-03
身份認證是很多Web應用系統的第一道關卡,如何有效地保證身份認證的可靠性、安全性和高效性是實現Web應用系統的關鍵。實現身份認證有很多方式。對于很多中小型企業來說,希望有一種既有較高的安全性,又有較低運行代價的身份認證方法,因而提出了一種輕量級基于Ajax的適合中小企業Web應用開發的身份認證。
Web主要協議是HTTP,具有天然的不安全性,它在網絡中主要以明文方式傳輸,極易受到中間人攻擊。為了解決HTTP傳輸過程的不安全性,網景公司提出了HTTPS。HTTPS雖然能夠保證傳輸的安全,但其需要公鑰系統,服務器端要對客戶端傳來的加密數據解密,同時基于公鑰系統的運算開銷較大。當應用系統的連接人數很多時,服務器將成為系統的瓶頸。這種加密數據傳輸方式不太適合某些中小企業低運算成本要求。
傳統HTTP協議使用的是請求/應答的同步通信方式,接收從服務器發來的響應后,將頁面刷新。而身份認證,一般均有多次請求/響應發生,將導致身份認證的頁面被多次刷新。為解決這個問題,傳統方式均采用遠程腳本來實現。遠程腳本可以與服務器交互,而不需刷新頁面。遠程腳本包括了Flash動畫、Java Applet、ActiveX組件和XML-RPC等。而這些方式有很多缺點,如耗費大量網絡帶寬、使用復雜及受瀏覽器影響較大等。
使用運算成本較低,安全性又較高的身份認證方法,以及找到一種使用簡單、耗用較少網絡帶寬同時又被絕大數瀏覽器所支持的遠程調用,是實現輕量級身份認證的關鍵。
1選擇身份認證方式
為了構建一個適合中小企業的既有較高安全性,又有較低運行代價的輕量級身份認證方法,通過對現有主要認證方式的分析,選取一種合適的身份認證方式。
(1)口令認證。它是一種常用身份認證方式,被認證對象向認證對象提供口令,認證方收到口令后,與系統存儲口令比較,確認被認證對象是否為合法用戶。口令認證非常簡單,易于實現,但極不安全,對于企業應用來說是不適合的。
(2)雙因子認證,即采用兩個因子認證。其中一個因子是只有用戶本身知道的密碼,它可以是個人認證號PIN或口令;另一個因子是只有該用戶擁有的外部物理實體——智能安全存儲介質。采用雙因子認證,雖然安全性有了雙保險,但它要求有智能安全存儲介質,使用不是很方便。
(3)S/KEY。通過該系統進行身份認證,被認證方需要多次進行Hash運算,服務器要記錄每次登錄的口令,而且每隔一段時間還需要重新初始化系統,認證過程的運算量和額外開銷較大。
(4)Kerberos和PKI認證系統。其安全性很好,但需要第三方的認證系統,非常復雜,成本和運算代價很高。
(5)挑戰握手認證。認證對象向被認證對象發送每次認證均不同的挑戰消息,被認證對象對挑戰消息和密鑰計算哈希值,并將該值作為挑戰的應答消息。最后認證方計算挑戰消息和用戶密鑰的哈希值,與被認證對象發送的應答消息比較,如相符,則認證成功。
從以上的分析,選取了挑戰應答作為身份認證的實現主要方式,較易實現,而且能夠保證認證過程的安全。
2Ajax概述
最早是由Jesse James Garrett在2005年2月提出Ajax這個詞,當其在Google Maps、Suggest和GMail等得到成功應用時,立即引起了人們的重視。人們使用Google Maps時,利用光標在刻度線上來回移動就可以放大或縮小地圖。而這一切都是即時的,無須等待頁面刷新。Ajax是Asynchronous JavaScript+XML的簡寫,它消除了桌面應用與Web應用在用戶體驗上的差距,是Web開發的重大變革。通過Ajax,用戶使用瀏覽器就可以異步的與后臺服務器方便的交互,而這一切,用戶并不知道。
Ajax是幾項流行技術的結合。它主要包含如下技術:基于標準化的XHTML和CSS;使用文檔對象模型DOM,實現動態顯示和交互;利用XML和XSLT進行數據交換與處理;采用XMLHttpRequest對象來異步獲取數據;最后用JavaScript整合以上所有技術。傳統Web應用程序工作模型如圖1所示。
傳統Web應用程序工作過程如下:
(1)從瀏覽器的用戶界面發出一個HTTP請求。
(2)Web服務器接收請求后,按照用戶請求,作相應的后臺處理,如查詢數據庫等操作。
(3)Web服務器最后返回HTML結果給客戶端。
傳統Web應用程序缺點如下:
(1)用戶發出請求后,只能是等待,直到服務器返回響應結果為止。
(2)用戶瀏覽界面必須刷新才能看到返回結果。
這些因素對實現需要多次交互的身份認證方式來說,明顯是不太適合的。
基于Ajax的Web應用程序工作模型如圖2所示。
圖1傳統Web應用程序工作模型圖2基于Ajax的Web應用程序工作模型
基于Ajax的Web應用程序工作過程:
(1)用戶通過某個事件觸發JavaScript調用Ajax引擎。
(2)Ajax引擎創建XMLHttpRequest對象實例,由該對象向服務器發出HTTP請求。
(3)Web服務器接收請求后,作相應后臺處理,并將結果以字符串或XML格式返回給XMLHttpRequest對象。
(4)XMLHttpRequest對象調用JavaScript的回調函數,由回調函數處理服務器端返回的數據,并最終將HTML結果傳遞給客戶端用戶界面。
相對傳統Web應用程序的優點如下:
(1)用戶提交請求后,由Ajax引擎負責與服務器的數據交互,用戶無須等待服務器是否返回了結果,就可以做其他事情,減少了用戶等待時間,實現了異步。
(2)用戶無須刷新自己的瀏覽器界面,就可以看到服務器返回的HTML結果。
(3)克服了對一個任務有多個步驟的傳統處理方式:請求-等待-響應-請求-等待-響應……。
(4)使用非常簡單,只需創建一個XMLHttpRequest對象實例,就可以異步與服務端程序交互,而這些主要由易用的JavaScript完成。
(5)得到了絕大部分主流瀏覽器的支持。
從傳統Web應用和基于Ajax的Web應用對比來看,基于Ajax的Web應用程序非常適合需要多次進行交互的身份認證。
3基于Ajax的輕量級身份認證模型
根據一些中小企業需要簡便易行,實施成本低,并有一定安全性的身份認證需求出發,采用挑戰應答身份認證方式,并結合Ajax技術來實現一個輕量級的身份認證。模型如圖3所示。它能夠避免采用HTTPS等方法,成本太高,服務器性能要求苛刻的缺點。同時為了防止身份數據庫被攻擊者盜取,在身份數據庫中,并不直接存取用戶密碼,而是用戶密碼和服務器名的哈希值。
圖3基于Ajax的輕量級身份認證模型
基于Ajax的輕量級身份認證模型實現過程:
(1)被認證用戶提交用戶名和密鑰K給Ajax引擎,Ajax引擎創建一個用于請求身份認證的XMLHttpRequest對象實例。
(2)XMLHttpRequest對象發送用戶名給身份認證服務進程,請求身份認證。
(3)身份認證服務進程查詢身份數據庫,身份數據庫主要存放了用戶名和相應的密碼和服務器名的哈希值:H(K||HostName)。其中||表示兩個字符串相連,K為用戶密碼,HostName是服務器名。H是哈希算法。
(4)從身份數據庫中獲取與該用戶名相對應的密碼哈希值,如果沒有該用戶記錄,則返回錯誤信息。
(5)身份認證服務進程產生挑戰消息:用戶IP||服務器名||時間戳||隨機數,以XML數據形式,發送到請求身份認證的XMLHttpRequest對象,如果沒有該用戶名,則直接發送無該用戶名錯誤信息給它。
(6)XMLHttpRequest對象將挑戰消息或無用戶名錯誤消息傳給回調函數。
(7)如果是無用戶名錯誤信息,回調函數把該錯誤消息顯示到用戶界面中,要求用戶重新輸入正確的用戶名。否則,將挑戰消息傳給另一個Ajax引擎,該引擎創建挑戰應答XMLHttpRequest對象實例,并計算應答消息:H(H(K||HostName)||用戶IP||服務器名||時間戳||隨機數)。
(8)把應答消息發送給認證服務進程。
(9)認證服務進程計算H(H(K||HostName)||用戶IP||服務器名||時間戳||隨機數),并與接收到的應答消息比較,如果相同則產生身份認證成功消息,否則產生身份認證密碼錯誤消息。并把認證結果消息傳給XMLHttpRequest對象。
(10)XMLHttpRequest對象將認證結果消息傳給回調函數。
(11)回調函數把該認證結果消息顯示到用戶界面中。
4特點
4.1安全性
(1)網絡偵聽。由于網絡傳輸是用戶的密碼加上挑戰消息的哈希值,偵聽者是無法還原出用戶密碼的。
(2)重放攻擊。每次認證,所選的時間戳和隨機數均不同,攻擊者無法進行有效的重放攻擊。
(3)在線口令猜測。只要用戶的密碼有一定強度,同時在服務器端限制用戶重復認證的次數,就可以避免在線口令猜測攻擊。
4.2服務器運算負載小
服務器端身份認證模塊只要進行一次哈希運算,而大部份哈希運算和公鑰系統運算相比,速度要快很多,服務器CPU負載也較小。避免了采用HTTPS,服務器運算負載較大。
4.3實現簡單
只要使用JavaScript創建兩個XMLHttpRequest對象實例,一個用于請求認證;一個用于挑戰應答,就可以完成與身份認證服務器進程的認證交互。
4.4適用性強
現有的絕大多數瀏覽器均支持該方法的實現,服務器端身份認證模塊可以采用各種編程語言實現,如Java和.NET等。
4.5異步性
用戶的身份認證工作是由Ajax來完成,而Ajax的實現是異步的,故用戶可以不等認證完成,仍可以做其他事情,認證結束后,頁面也可以不刷新。
5結束語
基于Ajax的輕量級身份認證非常適合某些中小企業身份認證的需求,具備一定的安全性,同時實現簡單,運行成本低,無須單獨建立第三方的身份認證系統。Ajax技術的產生,是開發Web應用程序的重大變革。將Ajax應用在身份認證模塊中,能夠快速簡單,并安全地實現身份認證。而這一切都是異步進行的,用戶無須了解身份認證的過程,甚至可以在身份認證過程中做其他事情,這極大提高了用戶的體驗。
參考文獻:
[1]KAUFMAN C, PERLMAN R, SPECINER M. Network security: private communication in a public world[M]. America: Prentice Hall,2002:477-500.
[2]TANENBAUM A S.計算機網絡·四版[M].潘愛民,譯.北京:清華大學出版社,2004:690-700.
[3]GARRETT J J. Ajax: a new approach to web applications[EB/OL].[2005-02].http://www.adaptivepath.com/publications/essays/archives/000385.php.
[4]CRANE D, PASCARELLO E, JAMES D. Ajax in action[M]. America: Manning,2005:246-278.
[5]ASLESON R, SCHUTTA N T.Foundations of Ajax[M]. America: Apress, 2005:1-20.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”