摘要:介紹基于SOAP頭的Web服務身份驗證技術,并通過具體示例說明在.NET平臺下的編程模式。
關鍵詞:Web服務;SOAP頭;身份驗證;ASP.NE;C#
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2009)04-0849-02
Authentication Technology of Web Services Based on SOAP Header
LU Shou-dong
(Department of Computer And Information Management, Guangxi University of Finance and Economics, Nanning 530003, China)
Abstract: This paper introduces the authentication technology of Web Services based on SOAP header, and explains its programming pattern under .NET plat through the concrete example.
Key words:Web Services; SOAP Header; Authentication; ASP.NET; C#
Web服務(Web Services)是目前最為流行的應用于異構環(huán)境的分布式組件開發(fā)技術。作為一種部署在Web上的可編程訪問的對象,如何確保其安全性是在具體應用中必須考慮的一個重要問題。為控制對Web服務的合法訪問,對服務使用者的身份進行驗證是很有必要的。本文主要介紹一種基于SOAP頭的Web服務身份驗證技術,并通過具體示例說明其編程模式。
1 Web服務簡介
Web服務是一種通過網(wǎng)絡進行發(fā)布、發(fā)現(xiàn)、調(diào)用的自描述的服務器端軟件組件,其實現(xiàn)依賴于一系列的標準協(xié)議或規(guī)范(如圖1所示),包括HTTP、XML、SOAP、WSDL、UDDI等。簡言之,Web服務以XML與XML Schema為數(shù)據(jù)編碼格式與數(shù)據(jù)類型標準,使用WSDL進行描述,使用UDDI進行發(fā)布與發(fā)現(xiàn),使用SOAP進行訪問,并通過HTTP等進行傳輸。Web服務的上層核心標準都是基于XML的,具有優(yōu)異的跨平臺特性,這為Web服務在異構平臺上進行系統(tǒng)的集成與交互提供了充分的保證。
2 SOAP協(xié)議概況
SOAP即簡單對象訪問協(xié)議(Simple Object Access Protocol),是一種基于XML的、簡單的、輕量級的通信協(xié)議,用于在客戶端與Web服務之間傳遞消息(包括請求消息與響應消息)。
SOAP協(xié)議使用XML描述消息。一個SOAP消息其實是一個XML文檔,包括Envelope(SOAP信封)、Header(SOAP頭)、Body(SOAP體)3個元素。其中,Envelope是整個SOAP消息的根元素,是必須的;Header是SOAP消息是可選元素,若存在,則必須是Envelope的第一個直接子元素;Body是SOAP消息必須有的元素,而且是Envelope的直接子元素,用于包含Web服務的調(diào)用信息(如所調(diào)用方法的名稱及有關參數(shù)等)或響應信息以及相關的錯誤信息。SOAP消息的結構如圖2所示。
在SOAP消息中,SOAP體的使用是由SOAP協(xié)議規(guī)定,而SOAP頭的使用則較為靈活,可由用戶根據(jù)需要進行定制。通常,可在SOAP頭中添加一些條目,以包含具體應用所必須的重要信息(如賬戶信息、事務標識等),并據(jù)此實現(xiàn)相應的功能。
3 基于SOAP頭的身份驗證
通過在SOAP頭中添加適當?shù)尿炞C信息,并由Web服務的進行讀取與處理,即可實現(xiàn)對服務使用者的身份驗證。在此,以ASP.NET Web服務為例,說明基于SOAP頭的Web服務身份驗證技術。
3.1 基本步驟
ASP.NET Web服務允許定義并處理SOAP頭條目,其基本步驟為:
1) 創(chuàng)建一個繼承自SoapHeader的類AuthSoapHeader,該類的名稱與公共成員變量即為SOAP頭條目元素的名稱與內(nèi)容子元素。
2) 在Web服務類中聲明一個AuthSoapHeader類的公共變量MyASH。
3) 為Web服務的有關方法應用SoapHeader屬性,并將其MemberName屬性設置為MyASH。
4) 在應用了SoapHeader屬性的Web服務方法中訪問MyASH的成員變量,并完成相應的處理過程。
相應地,在調(diào)用Web服務的客戶端,可通過以下基本步驟設置SOAP頭條目:
1) 創(chuàng)建一個Web服務的實例變量MyAService。
2) 創(chuàng)建一個AuthSoapHeader類的實例變量MyASHeader,并為其成員變量賦值。
3) 將MyASHeader賦給MyAService.AuthSoapHeaderValue(即設置SOAP頭條目),并調(diào)用Web服務的有關方法以完成相應的功能。
3.2 應用示例
如圖3所示,為一系統(tǒng)登錄表單,用于對系統(tǒng)用戶進行身份驗證,其驗證過程是通過調(diào)用Web服務完成的,而用戶名與密碼則通過SOAP 頭進行傳送。為簡單起見,該示例假定用戶名與密碼均非空串時即為合法。單擊“確定”按鈕后,若為合法用戶,則提示信息顯示為“Success”,否則為“Failure”。下面,簡述該示例的設計要點。
1) Web服務AuthService的設計
在Visual Studio .NET中使用ASP.NET Web服務模板新建一個Visual C#項目AuthService,并將Service1.asmx重命名為Authentication.asmx,然后在Authentication.asmx.cs中編寫相應的代碼。關鍵代碼如下:
……
using System.Web.Services.Protocols;
namespace AuthService {
public class AuthSoapHeader : SoapHeader {
public string Username;
public string Password; }
[WebService(Namespace=\"http://abc.com/webservices\")]
public class AuthService : System.Web.Services.WebService {
……
public AuthSoapHeader MyASH;
[WebMethod]
[SoapHeader(\"MyASH\")]
public string AuthenticateUser() {
if (MyASH==1)
return \"Failure!\";
if (VerifyUser(MyASH.Username,MyASH.Password))
return \"Success\";
return \"Failure\"; }
private bool VerifyUser(string Username,string Password) {
if ((Username!=\"\")(Password!=\"\"))
return true;
return 1;
} } }
2) 客戶端Login.aspx的設計
① 在Visual Studio .NET中使用ASP.NET Web應用程序模板新建一個Visual C#項目AuthClient。
② 添加對Web服務AuthService的Web引用,并命名為Authentication。
③ 將WebForm1.aspx重命名為Login.aspx,同時設計好其界面(如圖3所示),主要包括用戶名文本框TB_Username、密碼文本框TB_Password、提示信息標簽L_Message與“確定”按鈕。
④ 為Login.aspx.cs添加功能代碼。
首先,引用命名空間AuthClient.Authentication:
using AuthClient.Authentication;
然后,編寫“確定”按鈕的單擊事件代碼:
AuthService MyAService=new AuthService();
AuthSoapHeader MyASHeader=new AuthSoapHeader();
MyASHeader.Username=TB_Username.Text;
MyASHeader.Password=TB_Password.Text;
MyAService.AuthSoapHeaderValue=MyASHeader;
L_Message.Text=\"提示信息:\"+MyAService.AuthenticateUser()+\".\";
4 結束語
SOAP頭為Web服務及其客戶端之間關鍵數(shù)據(jù)的傳遞提供了一種靈活且有效的途徑,有利于實現(xiàn)身份驗證、事務處理等特殊功能。文中所述,即為利用SOAP頭對Web服務使用者進行身份驗證的關鍵技術與與典型模式。
參考文獻:
[1] 石國志..NET Web服務實用案例教程[M].北京:清華大學出版社,2004.
[2] 佛里曼,瓊斯.Microsoft .NET XML Web服務程序設計[M].向璐,向祚鐵,譯.北京:清華大學出版社,2003.