最近遇到一個問題,暴露在網絡上的Web Service如何做身份驗證,而不被其他人說是用, 花了一天的時間去看書,了解到三種方法,再下面記錄其中兩種,另一種是Form驗證,個人並不能完全了解清楚,所以也不在這誤人子弟了,閑話不說,開始:
第一種方案:通過 SOAP Header
首先需要我們自己去實現一個有身份驗證信息的類,這個類繼承System.Web.Services.Protocols.SoapHeader,而且定義兩個成員變量,一個為UserName,一個為PassWord.
public class MySoapHeader:SoapHeader
{
public string UserName
{
get;
set;
}
public string PassWord;
{
get;
set;
}
}
也可以在此類中加入驗證方法,當然需要看您項目的具體規划
接下來是Web Service的寫法
代碼
public class WebService : System.Web.Services.WebService
{
public WebService()
{
//如果使用設計的組件,請取消注釋以下行
//InitializeComponent();
}
public MySoapHeader header;
////定義用戶身份驗證類變量header
[WebMethod(Description = "用戶驗證測試")]
[System.Web.Services.Protocols.SoapHeader("header")]//用戶身份驗證的soap頭
public string HelloWorld()
{
string userName = header.UserName;
string passWord = header.PassWord;
return "Hello World";
//加入驗證權限的方法,如果之前的SOAPHeader中已經有方法這里可以直接調用
}
}
客戶端調用時的代碼比較簡單:
代碼
com.WebService test = new com.WebService();//你的web Service
MySoapHeader Header = new MySoapHeader();//web引用創建soap頭對象
//設置soap頭變量
Header.UserName = "Zane";
Header.PassWord = "Yao";
test.MySoapHeaderValue = Header;
//調用web 方法
Response.Write(test.HelloWorld());
這樣就完成了~
第二個方案: 將web服務程序設為集成windows身份驗證,當然需要將匿名訪問關閉,
客戶端web引用代碼
Test.WebReference.Service wr = new Test.WebReference.Service(); //生成web service實例
wr.Credentials = new NetworkCredential("用戶名","密碼");
Response.Write(wr.HelloWorld()); //調用web service方法