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

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:09:28
字體:
來源:轉載
供稿:網友

    在安全性要求不是很高的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,就這么簡單!

  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 通渭县| 平罗县| 兰坪| 太白县| 抚顺县| 龙井市| 醴陵市| 安新县| 汉川市| 昌平区| 广元市| 锡林郭勒盟| 黄龙县| 肃北| 巢湖市| 工布江达县| 彭泽县| 资中县| 尉氏县| 德庆县| 宕昌县| 固始县| 清丰县| 钦州市| 庆云县| 宁晋县| 定日县| 鄱阳县| 和田县| 宣恩县| 东丽区| 铁岭县| 临桂县| 商洛市| 积石山| 马尔康县| 罗平县| 阳朔县| 北票市| 富平县| 鄄城县|