zoukankan      html  css  js  c++  java
  • 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 来解决以上所述的问题...

     

     

     

  • 相关阅读:
    NX二次开发-UFUN设置显示状态抑制显示UF_DISP_set_display
    NX二次开发-使用NXOPEN C++向导模板做二次开发
    ANTV/G6 怎么按条件自定义节点颜色(Graphin)
    js数组去重及数组对象去重
    vue组件老胡机抽奖(转载)
    Kafka第二节
    Kafka第一节
    更改idea的database数据库连接的ddl格式
    不推荐别的了,IDEA 自带的数据库工具就很牛逼!
    MongoDB 按照时间段查询某个物理机的CPU使用率,按照时间倒序排序,取出最新的5条数据
  • 原文地址:https://www.cnblogs.com/wuyifu/p/3297944.html
Copyright © 2011-2022 走看看