加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

.net 平台下的webservice利用soapheader自定义信息做验证

发布时间:2020-12-17 01:05:39 所属栏目:安全 来源:网络整理
导读:前面几篇文章都说的是在java环境下制作webservice碰到的问题,现在再来说一下在.net平台下如何获取soapheader中的自定义信息。 首先我们先看一下客户端发起请求的soap,其中header部分的CertificationProxy节点为验证信息 soap:Envelope xmlns:soap="http://w

前面几篇文章都说的是在java环境下制作webservice碰到的问题,现在再来说一下在.net平台下如何获取soapheader中的自定义信息。

首先我们先看一下客户端发起请求的soap,其中header部分的CertificationProxy节点为验证信息

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
   <soap:Header>
      <tem:CertificationProxy>
         <!--Optional:-->
         <tem:USER>xxx</tem:USER>
         <!--Optional:-->
         <tem:PWD>xxx</tem:PWD>
         <!--Optional:-->
         <tem:REQUEST_SERVER_ADDRESS>xxx</tem:REQUEST_SERVER_ADDRESS>
      </tem:CertificationProxy>
   </soap:Header>
   <soap:Body>
      <tem:HellowWorld>
         <!--Optional:-->
         <tem:strXmlPara>xxx</tem:strXmlPara>
      </tem:HellowWorld>
   </soap:Body>
</soap:Envelope>

在服务端的这个HelloWorld方法如下

 /// <summary>
        /// HellowWorld
        /// </summary>
        /// <returns> HelloWorld</returns>
        [WebMethod]
        // 通知客户端该方法的soaphead节点名为CertificationProxy,这里CertificationProxy是代理类名而不是代理类实体变量名;
        [SoapHeader("certificationProxy")]
        public string HelloWorld(string s)
        {
            string str = "Hello World";
            if (IsValidPass())
            {
                if (s.Equals("cnm"))
                {
                    return "cnm";
                }

                return str;
            }
            else
            {
                //return "验证未通过";
                throw new Exception("验证未通过");
            }
        }
其中[SoapHeader("certificationProxy")]中指定的certificationProxy对象是我们对应自定义header信息所构建的类(CertificationProxy)的实例,这个类的内容如下

 /// <summary>
    /// webservice认证代理类
    /// </summary>
    /// <remarks>
    /// 作成者:cyf
    /// </remarks>
    public class CertificationProxy : SoapHeader
    {

        private string user = CWConstant.EMPTY;

        private string pwd = CWConstant.EMPTY;

        private string requestServerAddress = CWConstant.EMPTY;

        /// <summary>
        /// 用户名
        /// </summary>
        public string USER
        {
            set { this.user = value; }
            get { return this.user; }
        }

        /// <summary>
        /// 密码
        /// </summary>
        public string PWD
        {
            set { this.pwd = value; }
            get { return this.pwd; }
        }

        /// <summary>
        /// 发起请求的服务器地址
        /// </summary>
        public string REQUEST_SERVER_ADDRESS
        {
            set { this.requestServerAddress = value; }
            get { return this.requestServerAddress; }
        }
    }
其中的 USER、PWD、REQUEST_SERVER_ADDRESS这三个属性就是用于对应请求soap中的头部信息

验证的方法(IsValidPass)可以放在一个基类里让方法所属的类去继承,这样每个方法在需要验证的时候就可以调用基类里的验证方法了。

public class WsBase : System.Web.Services.WebService
    {
        /// <summary>
        /// 认证代理类实例
        /// </summary>
        public CertificationProxy certificationProxy;

        /// <summary>
        /// 判断请求信息是否通过认证
        /// </summary>
        /// <returns>
        /// true:通过;false: 未通过
        /// </returns>
        /// <remarks>
        /// 作成者:cyf        
        /// </remarks>
        protected bool IsValidPass()
        {
            if (CheckUtility.IsEmpty(certificationProxy))
            {
                // 验证信息不存在时
                return false;
            }
            else
            {
                SystemCertification sysCertificate = new SystemCertification();
                // 这里添加验证操作
                if (sysCertificate.InvokeSystemCertificateMethod(certificationProxy.USER,certificationProxy.PWD))
                {
                    // 用户名密码正确时
                    return true;
                }
                else
                {
                    // 用户名密码不正确时
                    return false;
                }
            }
        }
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读