Sécurité des services Web dans ASP.NET pour implémenter le contrôle d'accès

高洛峰
Libérer: 2017-01-24 09:50:43
original
2660 Les gens l'ont consulté

1. Présentation :

Les services Web sont des services d'application en ligne publiés par les entreprises pour répondre à leurs besoins commerciaux spécifiques. D'autres sociétés ou logiciels d'application peuvent accéder et utiliser ce service en ligne via Internet. Il fournit logiquement des données et des services à d'autres applications. Chaque application accède au service Web via des protocoles réseau et certains formats de données standard spécifiés (Http, XML, Soap) et obtient les résultats requis grâce à l'exécution interne du service Web. Puisqu'il est appelé via Internet, il doit y avoir des problèmes de sécurité qui peuvent être appelés par les utilisateurs du réseau. Comment implémenter la restriction des autorisations d'accès aux services Web est un problème important rencontré par les utilisateurs de services Web. Vous trouverez ci-dessous deux solutions pour résoudre les problèmes ci-dessus, du plus superficiel au plus profond.

2. Méthode simple basée sur la fonctionnalité "soapheader"

1. Présentation de "soapheader"

L'en-tête SOAP fournit une méthode pour transmettre des données aux méthodes de services Web XML ou transmettre des données. à partir des méthodes de services Web XML, à condition que les données ne soient pas directement liées à la fonctionnalité principale de la méthode de services Web XML. Dans la plupart des cas, il est utilisé pour transférer des informations d’authentification des utilisateurs. Bien entendu, son rôle est bien plus que cela, et il reste à le découvrir dans des applications pratiques.

2. soapheader implémente le code d'authentification de l'utilisateur

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;
      }
    }
  }
}
Copier après la connexion

3 Analyse des inconvénients :

(1) La logique de service et la logique de vérification des autorisations de l'utilisateur sont mélangées, et Complexité de compréhension des grands programmes.
(2) La logique d'autorisation n'est pas hautement réutilisable

2 Méthode basée sur la fonctionnalité "SoapExtensionAttribute"

1. Présentation de SoapExtensionAttribute et SoapExtension

<. 🎜 >SoapExtension et SoapExtensio. Les deux classes Attribute sont utilisées pour contrôler le processus général de sérialisation et de désérialisation du service Web, et peuvent contrôler des fonctions telles que la compression et la journalisation du service Web

2. Ce sont tous les paramètres de sécurité du Webservice. J'espère que cela pourra vous donner une référence. J'espère également que tout le monde prendra en charge le site Web PHP chinois.

Pour plus d'articles liés à la sécurité des services Web et au contrôle d'accès dans ASP.NET, veuillez prêter attention au site Web PHP chinois !
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";
 
    }
 
  }
}
Copier après la connexion
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal