zoukankan      html  css  js  c++  java
  • WebService 简单安全验证 欧阳锋

            最近新接了一个需要调用第三方WebService的项目,看到这个第三方WebService被调用的时候,需要授权用户名和密码,于是自己也想对WebService的安全授权这个方面进行了一下研究,以前调用的WebService大部分都是局域网内部调用,几乎没有什么权限需要增加的,今天借此机会,深入研究了一下,发现实现起来还是挺容易的。

           基本原理就是利用SoapHeader 类,继承该类,然后在我们公布的方法上加上对应的标签,呵呵。现在做一个Demo程序,进行验证。我们首先衍生一个自己的子类,暂命名为SecurityHeader ,在该类中需要增加一个公共属性,详看如下代码

      public class SecurityHeader : SoapHeader

        {
            
    public string SecurityKey
            {
                
    get;
                
    set;
            }
        }

          在WebService 中对该SoapHeader 的调用实现,也是比较容易理解的,详看一下代码就可以很好的理解了,代码中只需对SoapHeader进行验证就可以了。如果我们不增加SoapHeader,其实质就是普通的Public 类型的WebService 。调用的时候完全的公开的,不需要任何的验证信息。

     /// <summary>
        
    /// Summary description for Integration
        
    /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo 
    = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(
    false)]
        
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
        
    // [System.Web.Script.Services.ScriptService]
        public class Integration : System.Web.Services.WebService
        {
            
    public SecurityHeader securityKey = new SecurityHeader();

            [WebMethod]
            [SoapHeader(
    "securityKey")]
            
    public string HelloWorld(string show)
            {
                
    if (securityKey.SecurityKey.Equals("850"))
                {
                    
    return "This is security webservice " + show;
                }
                
    else
                {
                    
    return "Sorry,You didn't permissions!";
                }
            }

            [WebMethod]
            
    public string HelloPanda(string show)
            {
                
    return "This is public webservice  " + show;
            }

        } 

       

           验证程序代码如下:

         

     class Program
        {
            
    static void Main(string[] args)
            {
                PandaRGIntegration.SecurityHeader header 
    = new PandaRG.Listrak.PandaRGIntegration.SecurityHeader();
                header.SecurityKey 
    = "850";

                PandaRGIntegration.IntegrationSoapClient client 
    = new PandaRG.Listrak.PandaRGIntegration.IntegrationSoapClient();
                System.Console.WriteLine(client.HelloWorld(header,
    "Vincent"));
                System.Console.WriteLine(client.HelloPanda(
    "Vincent"));
                System.Console.Read();
            }
        }

    调用结果: 


          当我们修改 header.SecurityKey = "8500"时结果

     

           整个完整例子到此实验完毕。感性趣的,也可以自己试验一下。

    您的支持,我的动力!
  • 相关阅读:
    【原】更改ubuntu15.04的开机启动等待时间和启动项
    【转载】中文ubuntu里用户目录里的路径改成英文
    Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player
    如何直接从 Google Play 下载 APK 文件?
    Android Studio 1.1.0 最新版的安装和配置篇(Windows篇)【最新版】
    【更新到第10周】杭州电子科技大学计算机学院C#课程作业合集参考和下载
    华为P7拆机换屏图片教程
    网赚72变-桌面教程+引流技术分享
    Tomcat 8080爆破多线程
    微速摄影教学之系列视频+摄影技术
  • 原文地址:https://www.cnblogs.com/luking/p/1970592.html
Copyright © 2011-2022 走看看