ASP.NET中Webservice安全 實現存取權限控制

來源:互聯網
上載者:User
一、 概述:

  Web Services是由企業發布的完成其特定商務需求的線上應用服務,其他公司或應用軟體能夠通過Internet來訪問並使用這項線上服務。它邏輯性的為 其他應用程式提供資料與服務.各應用程式通過網路通訊協定和規定的一些標準資料格式(Http,XML,Soap)來訪問Web Service,通過Web Service內部執行得到所需結果。由於它通過internet進行調用,必然存在網路使用者都可以調用的安全問題。如何?webservice的訪問 許可權限制,是使用webservice使用者使用面臨重要的問題,下文就給兩種方案,從淺到深解決上面問題。

二、基於“soapheader” 特性的簡單方法

1." soapheader" 概述

SOAP 標頭提供了一種方法,用於將資料傳遞到 XML Web services 方法或從 XML Web services 方法傳遞資料,條件是該資料不直接與 XML Web services 方法的主功能相關。 多數情況下用來傳遞使用者身分識別驗證資訊,當然它的作用遠不止如此,有待於在實際應用中發掘。

2.soapheader實現使用者身分識別驗證代碼

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;namespace UserCenter{  public class MySoapHeader :SoapHeader  {    public string UserName    {      get;      set;    }    public string PWD    {      get;      set;    }  }  /// <summary>  /// MyMath 的摘要說明  /// </summary>  [WebService(Namespace = "http://tempuri.org/")]  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  [System.ComponentModel.ToolboxItem(false)]  // 若要允許使用 ASP.NET AJAX 從指令碼中調用此 Web 服務,請取消對下行的注釋。  // [System.Web.Script.Services.ScriptService]  public class MyMath : System.Web.Services.WebService  {    public MySoapHeader sHeader;    [WebMethod]    public string HelloWorld()    {      return "Hello World";    }    [WebMethod]    [SoapHeader("sHeader")]    public string add(int x, int y)    {      if (sHeader.UserName == "test" && sHeader.PWD == "test")      {        return (x + y).ToString();      }      else      {        return null;      }    }  }}

3.缺點分析:

(1)服務邏輯和使用者權限驗證邏輯混和,加大程式理解複雜度。
(2)許可權邏輯重用性不高

二、基於“SoapExtensionAttribute” 特性的方法

1.SoapExtensionAttribute與SoapExtension概述

SoapExtension和SoapExtensio。Attribute兩個類用於控制webservice序列化和還原序列化的一般過程,可對webservice進行壓縮和日誌等功能進行控制.

2.實現代碼

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace XMLClass1.class15.content {   [AttributeUsage(AttributeTargets.Method)]   public class MyExtensionAttribute : SoapExtensionAttribute   {     int _priority = 1;     public override int Priority     {       get { return _priority; }       set { _priority = value; }     }     public override Type ExtensionType     {       get { return typeof(MyExtension); }     }   }   public class MyExtension : SoapExtension   {     //這個override的方法會被調用四次     //分別是SoapMessageStage BeforeSerialize,AfterSerialize,BeforeDeserialize,AfterDeserialize     public override void ProcessMessage(SoapMessage message)     {       if (message.Stage == SoapMessageStage.AfterDeserialize)//還原序列化之後處理       {         bool check = false;         foreach (SoapHeader header in message.Headers)         {           if (header is MySoapHeader)           {             MySoapHeader myHeader = (MySoapHeader)header;             if (myHeader.Name == "admin" || myHeader.PassWord == "admin")             {               check = true;               break;             }           }         }         if (!check)           throw new SoapHeaderException("認證失敗", SoapException.ClientFaultCode);       }     }     public override Object GetInitializer(Type type)     {       return GetType();       }     public override Object GetInitializer(LogicalMethodInfo info, SoapExtensionAttribute attribute)     {       return null;     }     public override void Initialize(Object initializer)     {     }   }   public class MySoapHeader : SoapHeader   {     string _name;     string _passWord;     public string Name     {       get { return _name; }       set { _name = value; }     }     public string PassWord     {       get { return _passWord; }       set { _passWord = value; }     }   }   /// <summary>   /// headersoap2 的摘要說明   /// </summary>   [WebService(Namespace = http://tempuri.org/)]   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]   [System.ComponentModel.ToolboxItem(false)]   // 若要允許使用 ASP.NET AJAX 從指令碼中調用此 Web 服務,請取消對下行的注釋。   // [System.Web.Script.Services.ScriptService]   public class headersoap2 : System.Web.Services.WebService   {      public MySoapHeader header;     [WebMethod]     [MyExtensionAttribute]     [SoapHeader("header", Direction = SoapHeaderDirection.In)]     public string CheckHeader()     {       //商務邏輯.       return "Something done";     }   }}

以上就是Webservice的安全設定全部內容,希望能給大家一個參考,也希望大家多多支援topic.alibabacloud.com。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.