`
pcajax
  • 浏览: 2184641 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用SoapHeader验证web service调用的合法性(dwonmoon)

阅读更多

本文主要通过示例介绍利用SoapHeader验证web service调用的合法性,
一建立Web service项目,新建一个APIService.asmx
其后台代码如下

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Services.Protocols;
namespace Downmoon.API
{
/// <summary>
/// GlobalSetting 的摘要说明
/// </summary>
public class APIService : System.Web.Services.WebService
    {
public APIService()
        {
//SHeader = new SecuritySoapHeader();
        }
public class SecuritySoapHeader : SoapHeader
        {
#region Bak
private string _userName = string.Empty;
private string _pwd = string.Empty;
/**/
/// <summary>
/// 用户名
/// </summary>
public string InvokeUserName
            {
get
                { return _userName; }
set
                { _userName = value; }
            }
/**/
/// <summary>
/// 密码
/// </summary>
public string InvokeUserPwd
            {
get
                { return _pwd; }
set
                { _pwd = value; }
            }
#endregion
        }
#region Members
public SecuritySoapHeader SHeader = new SecuritySoapHeader();
private string _userName = string.Empty;
private string _pwd = string.Empty;
public string InvokeUserName
        {
get
            { return _userName; }
set
            { _userName = value; }
        }
public string InvokeUserPwd
        {
get
            { return _pwd; }
set
            { _pwd = value; }
        }
public static string SecurityUserID
        {
get
            {
try
                {
return System.Configuration.ConfigurationManager.AppSettings["SecurityUserID"].ToString().Trim();
                }
catch
                {
return "欢迎与邀月交流,net技术与软件架构";
                }
            }
        }
public static string SecurityUserPWD
        {
get
            {
try
                {
return System.Configuration.ConfigurationManager.AppSettings["SecurityUserPWD"].ToString().Trim();
                }
catch
                {
return "S2H3I4l5p6q7";
                }
            }
        }
#endregion
#region  Methods
#region CheckHeader
public bool IsLegalInvoked()
        {
return IsLegalInvoked(this.SHeader);
        }
public virtual bool IsLegalInvoked(SecuritySoapHeader header)
        {
bool bl = false;
if (header == null)
            {
//return "您没有设置SoapHeader,不能正常访问此服务!";
return bl;
            }
else if (header.InvokeUserName == null || header.InvokeUserName.Trim().Length == 0 || header.InvokeUserPwd == null || header.InvokeUserPwd.Trim().Length == 0)
            { return bl; }
if (header.InvokeUserName.Trim() != SecurityUserID || header.InvokeUserPwd.Trim() != SecurityUserPWD)
            {
//return "您提供的身份验证信息有误,不能正常访问此服务!";
return bl;
            }
            bl = true;
return bl;
        }
#endregion
#region ERRORHandle
private clsBasePage bp;
public void ErrorHandle(string strMessage)
        {
if (bp == null)
            {
                bp = new clsBasePage();
            }
else
            {
                bp.ErrorStop(strMessage);
return;
            }
        }
#endregion
#endregion
    }
}

二、添加一个PassPort.asmx,继承APIWebService,主要是为了重用SoapHeader,
调用方法如下(红色代码部分):

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
namespace Downmoon.API
{
/// <summary>
/// PassPort 的摘要说明 Downmoon Last Modified 
/// </summary>
    [WebService(Namespace = "欢迎与邀月交流,net技术与软件架构.API")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class PassPort : APIService
    {
public PassPort()
        {
        }
#region Members
#endregion
#region  Methods
#region 测试安全信息
        [WebMethod(Description = "Test Safe Invoke", EnableSession = true, CacheDuration = 30),SoapHeader("SHeader")]       
        public string HelloWorld()
        {
            if(IsLegalInvoked())
            {
            return "Suceed!";
            }
            else{
                return "Illegal Invoke!";
            }
        }
        #endregion
#endregion
    }
}

三、建立Vs2005测试项目,并添加一个测试类(vs2005会自动生成,呵呵)
修改后代码如下:

// 以下代码由 Microsoft Visual Studio 2005 生成。
// 测试所有者应该检查每个测试的有效性。
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Text;
using System.Collections.Generic;
namespace TestAPI2005
{
/// <summary>
///这是 Downmoon.API.PassPort 的测试类,旨在
///包含所有 Downmoon.API.PassPort 单元测试
///</summary>
    [TestClass()]
public class PassPortTest
    {
private TestContext testContextInstance;
/// <summary>
///获取或设置测试上下文,上下文提供
///有关当前测试运行及其功能的信息。
///</summary>
public TestContext TestContext
        {
get
            {
return testContextInstance;
            }
set
            {
                testContextInstance = value;
            }
        }
#region 附加测试属性
//编写测试时,可使用以下附加属性:
#region InitTest
public static string invokeusername;
public static string invokeuserpwd;
public static string username;
public static string userIP;
public static string ConnKey;
public static string ConnValue;
public static int rowCount;
public static DateTime ldNow;
#endregion
        [ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
        {
            invokeusername = "欢迎与邀月交流,net技术与软件架构";
            invokeuserpwd = "S2H3I4l5p6q7";
            username = "欢迎与邀月交流,net技术与软件架构";
            userIP = "10.103.33.6";
            ConnKey = "";
            ConnValue = "";
            rowCount = 0;
            ldNow = DateTime.Now;
        }
        [ClassCleanup()]
public static void MyClassCleanup()
        {
            invokeusername = null;
            invokeuserpwd = null;
        }
//使用 TestInitialize 在运行每个测试前先运行代码
//[TestInitialize()]
//public void MyTestInitialize()
//{
//}
//使用 TestCleanup 在运行完每个测试后运行代码
//[TestCleanup()]
//public void MyTestCleanup()
//{
//}
#endregion
#region HelloWorld () 的测试
/// <summary>
///HelloWorld () 的测试
///</summary>
        [TestMethod]
public void HelloWorldTest()
        {
try
            {
                TestAPI.PassPort.PassPort target = new TestAPI.PassPort.PassPort();
                target.SecuritySoapHeaderValue = new TestAPI.PassPort.SecuritySoapHeader();
                target.SecuritySoapHeaderValue.InvokeUserName = invokeusername;
                target.SecuritySoapHeaderValue.InvokeUserPwd = invokeuserpwd;
string str = target.HelloWorld();
                Console.WriteLine(str);//Console.WriteLine("Result:" + str);
                Assert.AreEqual(str, "Suceed!", false);
            }
catch (Exception ex)
            {
                Assert.Fail("单元测试生成错误: "+ex.Message);
////Console.WriteLine(ex.Message);
            }
        }
#endregion
    }
}

四、在测试管理器中勾选该测试类
右键“运行选中的测试”,即可看到运行结果:通过!
标准输出 Suceed!
此时如果在浏览器中直接调用该服务,将会出现 “Illegal Invoke!”
OK! 结束
以上代码适用于.net 2.0及Vsts 2005。应该也可以适用于vs2003。

邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
助人等于自助!   3w@live.cn

分享到:
评论

相关推荐

    C#静态调用带有SoapHeader验证的WebService

    关于此代码的使用及相关配置,可以见此文:...代码开发时环境:Windows8.1、Visual Studio 2013、IIS8 注意:测试代码时,重新部署WebService服务且修改客户端测试程序的服务引用

    Web Service的安全性解决方法

    Web Service 的安全性解决方法 Web Service 的安全性解决方法是指在使用 Web Service 时,为了确保数据的安全性和可靠性而采取的一些措施。下面将详细介绍一种使用 SOAP 头信息来实现 Web Service 的安全性解决方法...

    Java Webservice Axis2 Client(含soapheader验证)

    3. **设置SOAP Header**:在调用Web服务之前,需要设置SOAP Header以包含验证信息。在Axis2中,可以通过`SOAPHeader`和`SOAPHeaderBlock`对象来实现。例如,如果你的SOAP Header需要包含认证信息,可以这样做: ``...

    java SOAPHEADER的web service

    以上知识点总结了在Java中处理SOAPHEADER的Web服务请求的关键步骤和注意事项,包括如何利用Axis生成客户端类包、如何手动添加和处理SOAPHEADER以及如何进行客户端测试和调试。掌握这些知识对于开发和维护基于SOAP的...

    WebService安全性之SoapHeader

    总结来说,“WebService安全性之SoapHeader”涵盖了如何在VS2010环境中利用SoapHeader进行身份验证和提升Web服务安全性。通过创建自定义Header类,结合服务接口的[SoapHeader]特性,以及在客户端设置Header,我们...

    soapHeader验证例子

    在IT行业中,Web服务是一种广泛使用的接口技术,用于不同系统之间的数据交换。...SOAP Header是SOAP消息的一部分,用于传递附加信息,如认证、...对于那些想要深入理解Web服务交互和安全性的人来说,这是一个宝贵的资源。

    【ASP.NET编程知识】Asp.net页面中调用soapheader进行验证的操作步骤.docx

    这种方式允许开发者在不修改方法签名的情况下,通过 SOAP Header 传递额外的验证信息,增强了 Web Service 的安全性。需要注意的是,实际应用中应考虑加密传输敏感信息(如密码),以及对验证信息进行适当的处理和...

    Web Service 身份验证1

    这种方法适用于那些需要在每次调用Web Service时验证用户身份的情况。可以通过扩展`MySoapHeader`类来支持更复杂的认证机制,例如添加证书、OAuth令牌或JWT(JSON Web Tokens)。 6. **UI与Web Service的交互**: ...

    C#通过SOAP使用HttpWebRequest调用带有身份验证的WebService示例

    本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599

    C#调用使用java的带soaphead的webservice

    本案例中,我们将探讨如何使用C#在VS2013环境下调用一个Java编写的带有SOAP Header的Web服务。这个过程涉及到.NET Framework的Web服务客户端代理生成、SOAP消息的处理以及与Java Web服务的交互。 首先,我们需要...

    Web Service的安全机制.docx

    Web Service 的安全机制主要从两个方面考虑:一是利用 Windows 安全机制,另一个就是利用 SOAP 标头。 利用 Windows 安全机制 在利用 Windows 安全机制时,我们可以通过设置“目录安全性”选项卡来控制访问权限。...

    Web Service SOAP Client set SOAP Header

    要设置SOAP Header以便在Web Service调用中添加这些验证信息,我们可以创建一个自定义的SOAP Handler。以下是一个Java实现的例子,展示了如何在SOAP Message中插入这样的SOAP Header: ```java import javax.xml....

    安卓开发-从android中调用web service的源码.zip

    在Android开发中,调用Web Service是常见的数据交互方式,特别是在需要与远程服务器进行数据交换时。本资源“安卓开发-从android中调用web service的源码.zip”提供了具体的实现示例,帮助开发者理解这一过程。以下...

    .net调用java xfire发布的webservice封装soapheader头信息

    跨平台调用WebService时,正确处理SOAPHeader是确保服务安全性和功能完整性的关键。通过上述步骤,我们可以在.NET环境中成功调用由Java使用XFire框架发布的WebService,并且能够按照服务端的要求封装和传递必要的...

    C# 为webservice接口添加认证

    总的来说,通过在C# Web Service中使用SoapHeader进行认证,你可以确保只有经过验证的客户端能够访问你的服务。这增强了系统的安全性,并符合企业级应用程序的标准。然而,实际部署时应考虑更多的安全措施,如使用...

    VC调用WebServcve安全验证

    客户端在调用Web服务时,需要在SoapHeader中设置这些值,以便服务器端进行身份验证。 接下来,我们创建了一个名为`WebService`的Web服务,并添加了一个`HelloWord`的Web方法。在`WebService`类中,我们声明了一个`...

    SOAPHEADER方法增强WebService安全性代码

    本篇文章将深入探讨如何利用SOAP Header来增强Web Service的安全性,并通过具体的代码示例进行说明。 首先,我们需要了解为什么要在SOAP Header中处理安全性。传统的HTTP基础认证或Cookie认证方式可能存在安全隐患...

    简单Web service 身份验证解决方案

    Web service 身份验证是确保只有授权用户可以访问Web服务的一项关键技术。在构建安全Web服务的过程中,身份验证机制不可或缺,它可以防止未授权访问和潜在的安全风险。在给定的文件中,提出了两种Web service身份...

    Axis2教程和java调用webservice的各种方法总结

    2. "利用Java编写简单的WebService实例 - 少说些漂亮话,多做些日常平凡的事情 - ITeye技术网站.mht":此文件可能会提供一个实际的Java Web服务开发示例,指导读者如何从零开始创建一个简单的Web服务,强调实践操作...

Global site tag (gtag.js) - Google Analytics