最近遇到一個問題,暴露在網路上的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方法