WebService基于SoapHeader實(shí)現(xiàn)安全認(rèn)證
本文僅提供通過(guò)設(shè)置SoapHeader來(lái)控制非法用戶對(duì)WebService的調(diào)用,如果是WebService建議使用WSE3.0來(lái)保護(hù)Web服務(wù),如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服務(wù)認(rèn)證方法。以下提供一種基于SoapHeader的自定義驗(yàn)證方式。
1.首先要自定義SoapHeader,須繼承System.Web.Services.Protocols.SoapHeader 。
using System; using System.Collections.Generic; using System.Web; /// <summary> ///自定義的SoapHeader /// </summary> public class MySoapHeader : System.Web.Services.Protocols.SoapHeader { private string userName=string.Empty; private string passWord=string.Empty; /// <summary> /// 構(gòu)造函數(shù) /// </summary> public MySoapHeader() { } /// <summary> /// 構(gòu)造函數(shù) /// </summary> /// <param name="userName">用戶名</param> /// <param name="passWord">密碼</param> public MySoapHeader(string userName, string passWord) { this.userName = userName; this.passWord = passWord; } /// <summary> /// 獲取或設(shè)置用戶用戶名 /// </summary> public string UserName { get { return userName; } set { userName = value; } } /// <summary> /// 獲取或設(shè)置用戶密碼 /// </summary> public string PassWord { get { return passWord; } set { passWord = value; } } }
2.添加WebService,并編寫相應(yīng)代碼。
using System; using System.Collections.Generic; using System.Web; using System.Web.Services; /// <summary> ///WebService 的摘要說(shuō)明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class WebService : System.Web.Services.WebService { //聲明Soap頭實(shí)例 public MySoapHeader myHeader=new MySoapHeader(); [System.Web.Services.Protocols.SoapHeader("myHeader")] [WebMethod] public string HelloWord() { //可以通過(guò)存儲(chǔ)在數(shù)據(jù)庫(kù)中的用戶與密碼來(lái)驗(yàn)證 if (myHeader.UserName.Equals("houlei")&myHeader.PassWord.Equals("houlei")) { return "調(diào)用服務(wù)成功!"; } else { return "對(duì)不起,您沒(méi)有權(quán)限調(diào)用此服務(wù)!"; } } }3.客戶端調(diào)用,分別使用不設(shè)置SoapHeader與設(shè)置SoapHeader。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace App { class Program { static void Main(string[] args) { localhost.WebService service = new localhost.WebService(); //沒(méi)有設(shè)置SoapHeader的服務(wù)調(diào)用 Console.WriteLine("沒(méi)有設(shè)置SoapHeader:" + service.HelloWord()); Console.WriteLine(); //將用戶名與密碼存入SoapHeader; localhost.MySoapHeader header = new localhost.MySoapHeader(); header.UserName = "houlei"; header.PassWord = "houlei"; service.MySoapHeaderValue = header; //設(shè)置SoapHeader的服務(wù)調(diào)用 Console.WriteLine("設(shè)置SoapHeader:" + service.HelloWord()); Console.Read(); } } }
4.運(yùn)行應(yīng)用程序,查看運(yùn)行結(jié)果。
再看一下直接通過(guò)瀏覽器的調(diào)用結(jié)果。
點(diǎn)擊HelloWord調(diào)用Web服務(wù),結(jié)果如下:
點(diǎn)擊“調(diào)用”按鈕,得到從服務(wù)器返回調(diào)用結(jié)果。
添加自定義SoapHeader可以成功調(diào)用WebService,否則不能調(diào)用WebService,從而實(shí)現(xiàn)對(duì)Web Service的非法調(diào)用。這種方法存在一定的弊端,就是在每一個(gè)WebService方法上都要進(jìn)行一下驗(yàn)證,如果用戶名與密碼存儲(chǔ)在數(shù)據(jù)庫(kù)中,每調(diào)用一次WebService都要訪問(wèn)一次數(shù)據(jù)庫(kù)進(jìn)行用戶名與密碼的驗(yàn)證,對(duì)于頻繁調(diào)用WebService來(lái)說(shuō),數(shù)據(jù)庫(kù)壓力很大。然而少量WebService調(diào)用這種方式還是一種不錯(cuò)的選擇。
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇