ASP.NET實現(xiàn)基于Forms認(rèn)證的WebService應(yīng)用實例
本文實例講述了ASP.NET實現(xiàn)基于Forms認(rèn)證的WebService應(yīng)用方法。分享給大家供大家參考。具體實現(xiàn)方法如下:
在安全性要求不是很高的ASP.Net程序中,基于Forms的身份驗證是經(jīng)常使用的一種方式,而如果需要對WebService進(jìn)行身份驗證,最常用的可能是基于Soap 標(biāo)頭的自定義身份驗證方式。如果對兩者做一下比較的話,顯然,基于Forms的驗證方式更加方便易用,能否將Forms驗證方式應(yīng)用到WebService中去呢?
從理論上講,使用基于Forms的方式對WebService進(jìn)行身份驗證是可行的,但是使用過程中會存在以下兩個問題:
1.基于Forms的驗證方式同時也是基于Cookie的驗證方式,在使用瀏覽器時,這個問題是不需要我們考慮的。但對于使用WebService的應(yīng)用程序來說,默認(rèn)是不能保存Cookie的,需要我們自己去做這個工作。
2.WebService既然是一個A2A(Application To Application)應(yīng)用程序,使用Web表單進(jìn)行身份驗證顯然不太合適,而且,這將不可避免的造成人機交互,使WebService的應(yīng)用大打折扣。
接下來,我們就分步解決這兩個問題:
1.Cookie的保存問題
WebService的客戶端代理類有一個屬性CookieContainer可用于設(shè)置或獲取Cookie集合,保存Cookie的任務(wù)就交給他了:
System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
MyService.WebService service = new App.MyService.WebService();
service.CookieContainer = cookieContainer;
2.我們不想使用Web表單進(jìn)行身份驗證,幸運的是,ASP.Net表單驗證中的表單頁(即Web.config文件中 forms 元素內(nèi)的loginUrl)同樣可以指定為WebService文件。
我們創(chuàng)建一個專門用作身份驗證的Web服務(wù),暫且命名為Login.asmx,然后讓 loginUrl 等于 “Login.asmx”,當(dāng)然,還需要在Web.config文件中的 authorization 節(jié)中禁止匿名訪問(否則我們可就白忙活了),完成配置后的Web.config文件如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="false" /> <authentication mode="Forms"> <forms name="MyService" loginUrl="Login.asmx"></forms> </authentication> <authorization > <deny users="?"/> </authorization> </system.web> </configuration>
其實我們并不想在未通過身份驗證時讓瀏覽器轉(zhuǎn)向到Login.asmx,對于使用WebService的客戶程序來說,真正的實惠在于:可以匿名訪問Login.asmx中的方法(當(dāng)然我們也可以把Login.asmx放在單獨的目錄中,然后允許對該目錄的匿名訪問來達(dá)個這個目的,但我覺得還是用loginUrl更優(yōu)雅一些)。
接下來,我們?yōu)長ogin.asmx添加用于身份驗證的WebMethod:
[WebMethod] public bool Check(string userName,string password) { if(userName == "aaaaaa" && password == "123456") //添加驗證邏輯 { System.Web.Security.FormsAuthentication.SetAuthCookie(userName, false); return true; } else { return false; } }
最后一步工作就是:讓客戶程序中的WebService實例與Login實例共享CookieContainer。
class Sample { System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer(); public void Login() { MyServiceLogin.Login login = new App.MyServiceLogin.Login(); login.CookieContainer = cookieContainer; login.Check("aaaaaa", "123456"); } public void ShowHelloWorld() { MyService.WebService service = new App.MyService.WebService(); service.CookieContainer = cookieContainer; Console.WriteLine(service.HelloWorld()); } }
Login()以后再ShowHelloWorld(),你是否看到了我們熟悉的“Hello World”?Ok,就這么簡單!
希望本文所述對大家的C#程序設(shè)計有所幫助。
- Jquery + Ajax調(diào)用webService實例代碼(asp.net)
- asp.net下使用jquery 的ajax+WebService+json 實現(xiàn)無刷新取后臺值的實現(xiàn)代碼
- PHP中調(diào)用ASP.NET的WebService的代碼
- jQuery Ajax方法調(diào)用 Asp.Net WebService 的詳細(xì)實例代碼
- ASP.NET WebService中使用ASP.NET_SessionId的問題說明
- 使用ASP.NET一般處理程序或WebService返回JSON的實現(xiàn)代碼
- asp.net(c#)動態(tài)修改webservice的地址和端口(動態(tài)修改配置文件)
- asp.net類庫中添加WebService引用出現(xiàn)問題解決方法
- asp.net webservice返回json的方法
- ASP.NET如何定時調(diào)用WebService服務(wù)
- ASP.NET調(diào)用WebService服務(wù)的方法詳解
- ASP.NET中Webservice安全 實現(xiàn)訪問權(quán)限控制
- ASP.NET中基于soaphead的webservice安全機制
相關(guān)文章
ASP.NET簡化編輯界面解決思路及實現(xiàn)代碼(2)
這篇與前一篇改進(jìn)部分,也許大家會留意到動畫演示,主要是GridVeiw的更新與刪除會在每row都有。因此Insus.NET把它抽取出來,放在GridView外,感興趣的朋友可以了解下啊,希望本文對你有所幫助2013-01-01ASP.NET2.0緩存(Cache)技術(shù)深入理解
緩存技術(shù)是ASP.NET2.0非常重要的一個特性,它提供了一種非常好的本地數(shù)據(jù)緩存機制,從而有效的提高數(shù)據(jù)訪問的性能2012-11-11asp.net實現(xiàn)Postgresql快速寫入/讀取大量數(shù)據(jù)實例
本篇文章主要介紹了asp.net實現(xiàn)Postgresql快速寫入/讀取大量數(shù)據(jù)實例,具有一定的參考價值,有興趣的可以了解一下2017-07-07ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實現(xiàn)
這篇文章主要介紹了ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04