• WebService基于SoapHeader实现安全认证[webservice][.net][安全][soapheader]


     摘 自: http://blog.sina.com.cn/s/blog_72b7a82d0100yyp8.html

    WebService基于SoapHeader实现安全认证[webservice][.net][安全][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;
    
    namespace WuFrame
    {
    
        /// <summary> 
        ///自定义的SoapHeader 
        /// </summary>  
        public class WuSoapHeader : System.Web.Services.Protocols.SoapHeader
        {
            private string userName = string.Empty;
            private string passWord = string.Empty;
            /// <summary> 
            /// 构造函数 
            /// </summary> 
            public WuSoapHeader()
            {
            }
            /// <summary> 
            /// 构造函数 
            /// </summary> 
            /// <param name="userName">用户名</param> 
            /// <param name="passWord">密码</param> 
            public WuSoapHeader(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.SessionState;
    using System.Web.Services;
    
    using WuFrame;
    using BSFW.Dao;
    using BSFW.Model;
    using System.Data;
    
    
    namespace BSFW
    {
        /// <summary>
        /// Test 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://wuyf.ws/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
    
        public class Test : System.Web.Services.WebService
        {
            public WuSoapHeader myHeader = new WuSoapHeader();
    
            [WebMethod(EnableSession = true)]
            //[WebMethod] 
            [System.Web.Services.Protocols.SoapHeader("myHeader")]
            public string HelloWorld(string name)
            {
                bool isLogin = false;
                string loginMsg = string.Empty;
    
                if (myHeader.UserName.Equals("wu") && myHeader.PassWord.Equals("123"))
                {
                    isLogin = true;
                    loginMsg = "验证成功!";
                }
                else
                {
                    isLogin = false;
                    loginMsg = "验证失败! username: " + myHeader.UserName + ", passowrd:" + myHeader.PassWord;
                }
    
                if (Session["name"] == null)
                {
                    Session.Add("name", "");
                }
                Session["name"] = name;
                return Session["name"].ToString() + ", 验证消息: " + loginMsg;
            }
    }

    }

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

            WsTest.Test test = new WsTest.Test();
            System.Net.CookieContainer cc = new System.Net.CookieContainer();
            private void button1_Click(object sender, EventArgs e)
            {
                WsTest.WuSoapHeader header = new WsTest.WuSoapHeader();
                header.UserName = txt_User.Text.ToString();
                header.PassWord = txt_Pwd.Text.ToString();
                test.WuSoapHeaderValue = header;
    
                MessageBox.Show(test.HelloWorld("winformApp_" + Guid.NewGuid().ToString()));
            }

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

    当然可以启用 Session 来解决以上所述的问题...

     

     

     

  • 相关阅读:
    模拟赛2020.9.11
    棋盘(dfs)
    树的重心
    模拟赛9.4
    最大数(线段树)
    [模板] 线段树
    [模板][数据结构] 树状数组
    [AHOI2018初中组][二分查找] 分组
    [模板] Kruskal 求最小生成树
    [模板] 最近公共祖先(LCA)的几种求法
  • 原文地址:https://www.cnblogs.com/wuyifu/p/3297944.html
Copyright © 2020-2023  润新知