• WebService基于SoapHeader实现安全认证


    本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。

    1.首先要自定义SoapHeader,须继承System.Web.Services.Protocols.SoapHeader。

    using System;  
    using System.Collections.Generic;  
    using System.Web;  
      
    /// <summary>  
    ///自定义的SoapHeader  
    /// </summary>  
    public class MySoapHeader : System.Web.Services.Protocols.SoapHeader  
    {  
      
        private string userName = string.Empty;  
        private string passWord = string.Empty;  
      
        /// <summary>  
        /// 构造函数  
        /// </summary>  
        public MySoapHeader()  
        {  
      
        }  
      
        /// <summary>  
        /// 构造函数  
        /// </summary>  
        /// <param name="userName">用户名</param>  
        /// <param name="passWord">密码</param>  
        public MySoapHeader(string userName, string passWord)  
        {  
            this.userName = userName;  
            this.passWord = passWord;  
        }  
      
        /// <summary>  
        /// 获取或设置用户用户名  
        /// </summary>  
        public string UserName  
        {  
            get { return userName; }  
            set { userName = value; }  
      
        }  
      
        /// <summary>  
        /// 获取或设置用户密码  
        /// </summary>  
        public string PassWord  
        {  
            get { return passWord; }  
            set { passWord = value; }  
        }  
    }  

    2.添加WebService,并编写相应代码。

    using System;  
    using System.Collections.Generic;  
    using System.Web;  
    using System.Web.Services;  
      
    /// <summary>  
    ///WebService 的摘要说明  
    /// </summary>  
    [WebService(Namespace = "http://tempuri.org/")]  
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
    public class WebService : System.Web.Services.WebService  
    {  
      
        //声明Soap头实例  
        public MySoapHeader myHeader = new MySoapHeader();  
      
        [System.Web.Services.Protocols.SoapHeader("myHeader")]  
        [WebMethod]  
        public string HelloWord()  
        {  
            //可以通过存储在数据库中的用户与密码来验证  
            if (myHeader.UserName.Equals("houlei") & myHeader.PassWord.Equals("houlei"))  
            {  
                return "调用服务成功!";  
            }  
            else  
            {  
                return "对不起,您没有权限调用此服务!";  
            }  
        }  
    }  

    3.客户端调用,分别使用不设置SoapHeader与设置SoapHeader。

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
      
    namespace App  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
      
                localhost.WebService service = new localhost.WebService();  
      
                //没有设置SoapHeader的服务调用  
                Console.WriteLine("没有设置SoapHeader:" + service.HelloWord());  
                Console.WriteLine();  
      
                //将用户名与密码存入SoapHeader;  
                localhost.MySoapHeader header = new localhost.MySoapHeader();  
                header.UserName = "houlei";  
                header.PassWord = "houlei";  
                service.MySoapHeaderValue = header;  
      
                //设置SoapHeader的服务调用  
          

    添加自定义SoapHeader可以成功调用WebService,否则不能调用WebService,从而实现对Web Service的非法调用。这种方法存在一定的弊端,就是在每一个WebService方法上都要进行一下验证,如果用户名与密码存储在数据库中,每调用一次WebService都要访问一次数据库进行用户名与密码的验证,对于频繁调用WebService来说,数据库压力很大。然而少量WebService调用这种方式还是一种不错的选择。

    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Web;  
    4. using System.Web.Services;  
    5.   
    6. /// <summary>  
    7. ///WebService 的摘要说明  
    8. /// </summary>  
    9. [WebService(Namespace = "http://tempuri.org/")]  
    10. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
    11. public class WebService : System.Web.Services.WebService  
    12. {  
    13.   
    14.     //声明Soap头实例  
    15.     public MySoapHeader myHeader = new MySoapHeader();  
    16.   
    17.     [System.Web.Services.Protocols.SoapHeader("myHeader")]  
    18.     [WebMethod]  
    19.     public string HelloWord()  
    20.     {  
    21.         //可以通过存储在数据库中的用户与密码来验证  
    22.         if (myHeader.UserName.Equals("houlei") & myHeader.PassWord.Equals("houlei"))  
    23.         {  
    24.             return "调用服务成功!";  
    25.         }  
    26.         else  
    27.         {  
    28.             return "对不起,您没有权限调用此服务!";  
    29.         }  
    30.     }  
    31. }  
  • 相关阅读:
    团队冲刺第一阶段 04day
    Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
    websocket AutoWired失败
    websocket实现后端服务端向前端实时发送消息
    websocket 404 close
    idea2019永久激活码
    @DateTimeFormat 日期转换失败
    博客园设置背景音乐(亲测有效)
    yml和properties配置在线转换
    idea导入项目项目代码不是原来代码
  • 原文地址:https://www.cnblogs.com/superfeeling/p/11560284.html
Copyright © 2020-2023  润新知