基於.NET的XML於WebService安全與性能優化

XML WEB SERVICE的跨平臺,跨語言性是勿庸置疑的。基於WEB SERVICE的分佈式系統將是WEB SERVICE最大的功能和特點。我們知道未來的網絡將提供各種各樣的服務,也許操作系統將失去效用,那時人們只要通過瀏覽器上網享用各種服務,這些服務就是我們的WEB SERVICE。那麼這樣也給我們同時帶來了很多問題,主要的就是WEB SERVICE的安全與優化該怎麼有效的解決?這是任何的網絡程序都面臨的挑戰,WEB SERVICE也可謂任重而道遠。
本文主要闡述了基於DOTNET的XML WEBSERVICE 數據傳輸安全性的加強以及如何提高XML WEBSERVICE的性能的一些方法及應用。
一、 SOAP與WEB SERVICE的關係
網絡傳輸離不開網絡協議的支持,在OSI網絡結構的七層模型中,XML WEB SERVICE應該是應用層的操作,那麼應用層中有諸如HTTP等協議,XML WEB SERVICE也就是基於HTTP協議族的。準確的說SOAP(簡單對象訪問協議)正是HTTP協議族中的一個子協議。它是專門用於WEB SERVICE的,因爲SOAP它的內部編碼就是XML。顧名思義XML WEB SERVICE中的XML就是指WEB SERVICE中的傳輸,部署等等相關操作都是基於XML編碼的,而SOAP就是用來實現WEB SERVICE數據傳輸的。可見,SOAP是XML WEB SERVICE的靈魂。我們知道,網絡最大的問題就是安全。而網絡安全主要是數據訪問的安全。那麼WEB SERVICE的安全關鍵點就在SOAP上。
那麼就讓我們瞭解一下SOAP。SOAP全名是簡單對象訪問協議。簡單的來說SOAP消息體包含頭條目和體條目。從XML編碼角度來說,頭條目中聲明瞭體條目中所要用到的命名空間,體條目中封裝了則是WEB SERVICE需要傳輸的數據。當然這是常規的。反之,我們可以從網絡安全或性能優化的角度考慮,可以在頭條目上數據或在體條目中加上想加的數據。當然,如果你想加密WEB SERVICE傳輸的數據達到安全的目的其實也就是對SOAP進行加密。
二、加密SOAP頭條目及加密SOAP擴展
1、加密SOAP頭條目
從代碼的角度要加密SOAP頭條目,首先必須先定義SOAPHeader的派生類,在派生類中定義的數據成員,將被包含在SOAP頭條目中進行傳輸。
DOTNET FRAMEWORK給我們提供DESCryptoServiceProvider等加密類,我們可以用該類對SOAPHeader定義的派生類的數據成員進行加密。這樣使得要傳輸的數據得到了加密,而不要加密整個SOAP消息。在WEBSERVICE的消費者(客戶端)和服務提供者交互SOAP時,兩端首先解析的都是SOAP頭,所以這樣做既可以達到加密的效果,也提高了WEB SERVICE的網絡傳輸的效率。
例如:用WEB SERVICE對客戶身份進行驗證實現安全登錄。客戶端就可以把用戶名,密碼封裝在一個SOAPHeader派生類中,然後用加密類對用戶名,密碼數據域進行加密,到達服務端再進行解密,這樣達到安全登錄的目的。
2、加密SOAP擴展
從WEBSERVICE生存期剖析,從SOAP請求到SOAP響應,整個傳輸過程都是基於SOAP的,那如果我們在SOAP請求後和SOAP響應前截取SOAP,然後對截取的SOAP的數據進行加密,那麼就可以達到WEBSERVICE網絡安全傳輸的目的。
下面介紹一下加密SOAP擴展的全過程
①從SoapExtension派生一個類
②保存對錶示將來 SOAP 消息的流的引用
③初始化 SOAP 擴展特定的數據
④處理 SOAP 消息(加密SOAP消息中的數據就可以在這裏進行)
⑤實現以上四步後就可以通過給特定的XML WEB SERVICE方法配置SOAP擴展就可以截取並加密SOAP消息。
三、身份驗證與WEB SERVICE安全模式
1、身份驗證
一般來說ASP.NET中提供了四種身份驗證
(1) 基於WINDOWS身份驗證
顧名思義WINDOWS身份驗證是根據WINDOWS操作系統提供的身份進行身份驗證的。在DOTNET中提供的類可以用來訪問WINDOWS操作系統的用戶和組。這種身份驗證模式比較適用於內部系統或***網絡系統。
(2) 基於FORMS(表單)身份驗證
表單身份驗證也就是基於WEBFORM進行身份驗證。當然ASP.NET可以通過配置WEB.CONFIG文件對錶單身份驗證進行具體的設置,可以加入DOTNET內部的一些加密的措施使常規的表單數據更具安全性。
(3) PASSPORT身份驗證
這是MICROSOFT提供的一種身份驗證服務。如果你要使用PASSPORT身份驗證那麼數據將交給PASSPORT來進行驗證,實際上PASSPORT就是一個提供身份驗證及註冊等功能的WEBSERVICE。
(4) 其他類型或自定義身份驗證
如用自定義SOAP頭進行身份驗證這就是自定義身份驗證,只要你把WEB.CONFIG中就可以進行自定義身份驗證了。這種身份驗證模式自主性比較強,但要注意的是要加強自定義身份驗證的安全性。
2、WEB SERVICE安全模式
DOTNET FRAMEWORK和公共語言運行庫支持兩種安全模式
(1) 基於角色的安全
在WINDOW的權限機制中一個角色包含有多個身份;一個身份也可能被授予多個角色。一個或多個角色與一個身份的結合叫做主體。在DOTNET中提供了通用身份、通用主體及WINDOW身份、WINDOW主體兩類身份和主體。分別是利用WINDOW自帶的主體安全機制和自定義主體安全機制來構造DOTNET系統的權限機制。
(2) 代碼訪問的安全
一般來說代碼訪問安全的工作方式是在代碼被允許執行前,代碼所駐留的程序集會在一個特定的代碼組中進行成員身份驗證,如果成員身份驗證通過,該程序集就會被賦予與代碼訪問組相關聯的權限。當然代碼訪問的安全還包含了代碼訪問權限;在DOTNET中例如用EnvironmentPermission類控制對環境變量的訪問;FileIOPermission控制對文件系統的訪問等等諸如此類都是代碼訪問權限的體現。
四、壓縮SOAP提高WEBSERVICE性能
SOAP是基於XML編碼的,而XML文件其實就是一個文本文件,因此SOAP消息也可以看作一個文本流。如果我們採用壓縮文本流的方法將會大大提高網絡傳輸的效率,從而也達到我們對WEBSERVICE性能的優化。
從操作系統的角度分析存儲壓縮的文本將會比存儲沒有壓縮的文本少80%的空間。也意味着在網絡上傳輸內容需要更少的時間,對於使用文本通信的客戶端服務器應用程序來說,將會表現出更高的效率。
當網絡傳輸的內容是文本的時候,通過壓縮,它的尺寸可以減少80%。這就意味着在客戶端和服務器之間帶寬的需求也可以減少類似的百分比。爲了壓縮和解壓縮,服務端和客戶端則佔用了CPU的額外資源。但升級服務器的CPU一般都會比增加帶寬的費用便宜,所以壓縮是提高傳輸效率的最有效的方法。
我們可以通過SOAP擴展來截取SOAP然後進行對請求的SOAP進行壓縮,對響應的SOAP進行解壓。
五、通過異步訪問服務器端WEB方法
異步訪問主要是針對WEBSERVICE客戶端所採用的。異步與同步的最主要的區別簡單的講就是異步沒有馬上返回結果,而同步則是馬上返回結果。但是實際上異步訪問是大多客戶端訪問服務器的方法。異步訪問在DOTNET中必須定義一個代理函數,通過代理函數來訪問WEBSERVICE的WEB方法。從操作系統的角度上說,實際上就是開闢一個線程來訪問服務器端的WEB方法。這樣可以提高WEBSERVICE客戶端訪問服務器端的WEB方法的性能。
六、通過類型化數據集提高訪問數據庫性能
類型化數據集是DataSet類的派生類,既然是派生類,那麼也就繼承了DataSet的所有方法、事件和屬性。
類型化數據集提供了強類型方法、事件和屬性。這意味着可以按名稱而不是使用基於集合的方法來訪問表和列。這裏指的強類型是指給出的一個XSD文件,使用DOTNET附帶的XSD.EXE工具生成強類型DataSet。
由於強類型DataSet中已經存有表的架構信息,所以將大大提高訪問數據庫的速度。如果我們在WEBSERVICE訪問數據庫的表時採用類型化數據集也將大大提高WEBSERVICE訪問數據庫的性能。
綜上所述,我們可以採用加密SOAP頭,以及通過SOAP擴展對SOAP消息進行加密。並可以通過身份驗證與WEBSERVICE安全模式以及代碼訪問安全技術從而達到提高WEBSERVICE的安全性的目的。通過壓縮SOAP以及客戶端異步訪問,採用類型化數據集訪問數據庫這些措施提高了WEBSERVICE的性能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章