国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用ASP.Net Forms模式實現WebService身份驗證

2019-11-18 16:56:32
字體:
來源:轉載
供稿:網友

    在安全性要求不是很高的asp.net程序中,基于Forms的身份驗證是經常使用的一種方式,而如果需要對WebService進行身份驗證,最常用的可能是基于Soap 標頭的自定義身份驗證方式。如果對兩者做一下比較的話,顯然,基于Forms的驗證方式更加方便易用,能否將Forms驗證方式應用到WebService中去呢?
    從理論上講,使用基于Forms的方式對WebService進行身份驗證是可行的,但是使用過程中會存在以下兩個問題:
1.基于Forms的驗證方式同時也是基于Cookie的驗證方式,在使用瀏覽器時,這個問題是不需要我們考慮的。但對于使用WebService的應用程序來說,默認是不能保存Cookie的,需要我們自己去做這個工作。
2.WebService既然是一個A2A(application To Application)應用程序,使用Web表單進行身份驗證顯然不太合適,而且,這將不可避免的造成人機交互,使WebService的應用大打折扣。
  接下來,我們就分步解決這兩個問題:
1.Cookie的保存問題
    WebService的客戶端代理類有一個屬性CookieContainer可用于設置或獲取Cookie集合,保存Cookie的任務就交給他了:

System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();

MyService.WebService service = new App.MyService.WebService();
service.CookieContainer = cookieContainer;
2.我們不想使用Web表單進行身份驗證,幸運的是,ASP.Net表單驗證中的表單頁(即Web.config文件中 forms 元素內的loginUrl)同樣可以指定為WebService文件。
    我們創建一個專門用作身份驗證的Web服務,暫且命名為Login.asmx,然后讓 loginUrl 等于 “Login.asmx”,當然,還需要在Web.config文件中的 authorization 節中禁止匿名訪問(否則我們可就白忙活了),完成配置后的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>

    其實我們并不想在未通過身份驗證時讓瀏覽器轉向到Login.asmx,對于使用WebService的客戶程序來說,真正的實惠在于:可以匿名訪問Login.asmx中的方法(當然我們也可以把Login.asmx放在單獨的目錄中,然后允許對該目錄的匿名訪問來達個這個目的,但我覺得還是用loginUrl更優雅一些)。
    接下來,我們為Login.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,就這么簡單!
http://m.survivalescaperooms.com/chinadhf/archive/2006/10/08/520975.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 内丘县| 商南县| 东方市| 斗六市| 安徽省| 乐亭县| 嘉鱼县| 精河县| 沈阳市| 建湖县| 阳春市| 宣汉县| 苍梧县| 韶关市| 青州市| 横峰县| 东台市| 密云县| 江山市| 新晃| 淮南市| 蒲江县| 永城市| 芮城县| 林芝县| 沙湾县| 体育| 阜城县| 丹阳市| 华坪县| 天津市| 漳州市| 奎屯市| 中方县| 梨树县| 石棉县| 贵定县| 朔州市| 都兰县| 肇东市| 靖宇县|