Heim  >  Artikel  >  Backend-Entwicklung  >  Webservice-Sicherheit in ASP.NET zur Implementierung der Zugriffskontrolle

Webservice-Sicherheit in ASP.NET zur Implementierung der Zugriffskontrolle

高洛峰
高洛峰Original
2017-01-24 09:50:432633Durchsuche

1. Übersicht:

Webdienste sind Online-Anwendungsdienste, die von Unternehmen zur Erfüllung ihrer spezifischen Geschäftsanforderungen bereitgestellt werden und über das Internet auf diesen Online-Dienst zugreifen und ihn nutzen können. Es stellt Daten und Dienste logisch für andere Anwendungen bereit. Jede Anwendung greift über Netzwerkprotokolle und einige spezifizierte Standarddatenformate (Http, XML, Soap) auf den Webdienst zu und erhält die erforderlichen Ergebnisse durch die interne Ausführung des Webdienstes. Da der Aufruf über das Internet erfolgt, muss es Sicherheitsprobleme geben, die von Netzwerkbenutzern aufgerufen werden können. Die Implementierung der Beschränkung der Webservice-Zugriffsberechtigung ist ein wichtiges Problem, mit dem Webservice-Benutzer konfrontiert sind. Im Folgenden finden Sie zwei Lösungen, um die oben genannten Probleme von oberflächlich bis tiefgreifend zu lösen.

2. Einfache Methode basierend auf der „Soapheader“-Funktion

1. „Soapheader“-Übersicht

Der SOAP-Header bietet eine Methode zum Übergeben von Daten an XML-Webdienstmethoden oder zum Übergeben von Daten aus XML-Webservices-Methoden, sofern die Daten nicht in direktem Zusammenhang mit der Hauptfunktionalität der XML-Webservices-Methode stehen. In den meisten Fällen wird es zur Übermittlung von Benutzerauthentifizierungsinformationen verwendet. Natürlich geht seine Rolle weit darüber hinaus und muss in praktischen Anwendungen noch entdeckt werden.

2. Soapheader implementiert Benutzerauthentifizierungscode

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. Nachteilsanalyse:

(1) Dienstlogik und Benutzerberechtigungsüberprüfungslogik sind gemischt und Komplexität des Verständnisses großer Programme.
(2) Berechtigungslogik ist nicht in hohem Maße wiederverwendbar

2. Methode basierend auf der Funktion „SoapExtensionAttribute“

1. Übersicht über SoapExtensionAttribute und SoapExtension

SoapExtension und SoapExtensio. Die beiden Attributklassen werden zur Steuerung des allgemeinen Prozesses der Webservice-Serialisierung und -Deserialisierung verwendet und können Funktionen wie die Komprimierung und Protokollierung von Webservices steuern.

Oben sind alle Sicherheitseinstellungen von Webservice. Ich hoffe, dass es Ihnen eine Referenz geben kann. Ich hoffe auch, dass jeder die chinesische PHP-Website unterstützt.
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";
 
    }
 
  }
}

Weitere Artikel zum Thema Webservice-Sicherheit und Zugriffskontrolle in ASP.NET finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn