webService访问加密-Soapheader

原文:webService访问加密-Soapheader

转载:http://blog.csdn.net/wanderocn/article/details/6584098

WebService head加密,可以对 WebService设置访问用户名和密码,增强 WebService的安全性 使 WebService只能被授权用户使用。
具体实现步骤:
1、 定义一个 soapheader派生类用来实现 WebService访问权限验证

 

using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;  

/// <summary>
///MySoapHeader 的摘要说明
/// </summary>
public class MySoapHeader:System .Web .Services .Protocols .SoapHeader
{
    private string _uname = string.Empty;//webservice访问用户名  

    public string Uname
    {
        get { return _uname; }
        set { _uname = value; }
    }
    private string _password = string.Empty;//webservice访问密码  

    public string Password
    {
        get { return _password; }
        set { _password = value; }
    }  

    public MySoapHeader()
    {
     //
     //TODO: 在此处添加构造函数逻辑
     //
    }
    public MySoapHeader(string uname, string upass)
    {
        init(uname, upass);
    }
    private void init(string uname, string upass)
    {
        this._password = upass;
        this._uname = uname;
    }
    //验证用户是否有权访问内部接口
    private bool isValid(string uname, string upass, out string msg)
    {
        msg = "";
        if (uname == "admin" && upass =="admin")
        {
            return true;
        }
        else {
            msg = "对不起!您无权调用此WebService!";
            return false;
        }
    }
    //验证用户是否有权访问外部接口
    public bool isValid(out string msg)
    {
        return isValid(_uname, _password,out msg);
    }
}

2、 定义有需要验证的 WebService。

 

using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;  

/// <summary>
///test 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class test : System.Web.Services.WebService {  

    public test () {  

        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }
    public MySoapHeader myheader = new MySoapHeader();
    [WebMethod]
    public string HelloWorld() {//普通WebService,无需验证
        return "Hello World";
    }
    [SoapHeader("myheader")]//加入此头部的WebService需要验证,不加则为普通WebService无需验证  

    [WebMethod(Description = "根据产品编号查询产品的价格", EnableSession = true)]  

    public string GetProductPrice2(string ProductId)
    {  

        string msg = "";  

        //验证是否有权访问  

        if (!myheader.isValid(out  msg))
        {  

            return -1;//返回错误信息  

        }  

        return ProductId;
    }
 }

3、 客户端调用方法
引用 WebService定义 WebService名称为 :Myservice。

using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        myservice.test te = new abc.test();
        myservice.MySoapHeader myhead = new MySoapHeader();
        myhead.Uname = "admin";//输入WebService访问用户名
        myhead.Password = "admin";//输入WebService访问密码
        te.MySoapHeaderValue = myhead;//
        string test = te.GetProductPrice2("ok!");
      Response.Write(aa);//用户名、密码输入正确则输出ok 否则输出 错误msg
    }
时间: 2024-10-28 07:36:45

webService访问加密-Soapheader的相关文章

axis2 webservice访问报错,下标越界

问题描述 axis2 webservice访问报错,下标越界 使用axis2做webservice.服务可以正常发布,在使用一个类调用服务时服务端报数组下标越界,谁可以帮忙解答一下. 服务端:public String createContract(String json){ return "aa"; } 客户端: try { call = (Call) service.createCall(); call.setTargetEndpointAddress(url); call.set

服务器-.net WebService访问不稳定

问题描述 .net WebService访问不稳定 IIS服务器环境是做的NLB集群,然后集群ip又做了一个端口映射转到公网ip.映射端口没有改变. 现在是通过公网IP对服务器上部署的WebService进行访问. 访问使用的是C#程序,实验使用了两种访问方式(1.通过服务引用方式.2.通过自己写soap要求的格式通过webrequest进行请求). 目前遇到的问题是:访问不稳定,有时是访问正常的,有时访问就不正常了.但是当程序访问不正常时,通过浏览器访问却是正常的. 目前不清楚到底是哪里出现了

解决.Net调用Java webservice访问被拒绝的方案

最近用.net调用java写的webservice时,出现了一个奇怪的问题:Webservice服务部署在本机,外面机器的web引用可以正确添加,但调试运行时,就出现"目标机器积极拒绝(target machine actively refused)"错误!真是奇怪了. 最近用.net调用java写的webservice时,出现了一个奇怪的问题:Webservice服务部署在本机,外面机器的web引用可以正确添加,但调试运行时,就出现"目标机器积极拒绝(target mach

关于安卓通过webservice访问数据库问题

访问数据库时,手机能增删数据库的数据就是显示不了数据库的里的数据不知道是哪里的问题,用的HTTP 这是我webservice中的产看所有信息的方法: public List<string> selectAllCargoInfor() { List<string> list = new List<string>(); try { string sql = "select * from C"; SqlCommand cmd = new SqlComman

webservice访问异常

问题描述 我们系统环境出了一个奇怪的问题,求大神帮忙啊问题就是我本地的环境调用目标webservice地址可以正常访问,但是生产环境调用同一个webservice地址就报如下异常:org.apache.axis2.AxisFault:ArequiredheaderrepresentingaMessageAddressingPropertyisnotpresentatorg.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Util

集群中的webservice访问次数控制情况。

问题描述 我现在有这么一个需求,要控制用户的webservice每分钟的请求次数,超过这个次数则该分钟内用户不可访问.如果是单应用我使用静态参数(Map)来记录访问次数,我可以控制用户的访问次数.现在有个问题,我使用一个apache+2个Tomcat做负载均衡,这种情况怎么记录用户的访问次数呢?如果这时候使用静态参数来记录就不行了,请大神帮帮忙,说说思路. 解决方案 解决方案二:不知道通过IP是否可用的?

框架-axis2配置webservice,访问url能debug到service,但dao层为null

问题描述 axis2配置webservice,访问url能debug到service,但dao层为null 有人遇到过这种问题吗?如何解决?我的sturts2+spring3+mbatis框架可以跑通,但是用webservice访问不到dao层,debug进来为空.注释注入的方法不灵,写xml注入也没通过,求教高手啊,在线等

Silverlight跨域访问WebService解决方法

在用Silverlight调用WebService时,发生以下错误: 原因: Silverlight通过WebService访问了别的服务端数据.s 解决方法,建立跨域策略文件: 在该Silverlight网站根目录建立2个XML文件: ClientAccessPolicy.xml <?xml version="1.0" encoding="utf-8" ?> <access-policy>   <cross-domain-access

SoftHSM 1.3.3发布 加密文件访问工具

SoftHSM 是一款通过PKC++S#11接口访问加密存储文件的程序.你可以用它来探测PKCS#11,而无需硬件安全模块.该程序可以作为一个OpenDNSSEC项目的一部分,使用Botan进行加密操作. SoftHSM 1.3.3该版本增加性能,增加更多的索引数据库,介绍了使用和用户PIN的自述,并检测是否有C++编译器丢失. 软件信息:https://wiki.opendnssec.org/display/SoftHSMDOCS/SoftHSM+Documentation+Home 下载地址