webservice加密,通过SoapHeader来增强Web Service的安全性

(通常webservice 加密都是加Token.其实就是在SOAP包的包头里面加个用户名和密码...
在C#封完包后,操作包头好了)

 

7.9  如何保证Web Service的安全

要以安全的方式访问Web服务方法,可以考虑以下安全措施:

是谁调用?--SoapHeader身份认证。

来自哪里?--访问IP认证。

加密传输 --SSL安全访问。

这些安全保护措施常常是配合使用的。

7.9.1  通过SoapHeader来增强Web Service的安全性

通过SoapHeader我们可以让具有指定用户口令的用户来访问我们的Web服务接口。(完整代码示例位置:光盘\code\ch07\WebAppClient\WebForm-SoapHeader.aspx)


1.Web Service实现步骤

(1)定义自己的SoapHeader派生类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

//<summary> 
//定义自己的SoapHeader派生类
//</summary>
public class MySoapHeader : System.Web.Services.Protocols.SoapHeader 
{   
    private string _UserID = string.Empty;     
    private string _PassWord = string.Empty;     
    //<summary>    
    //构造函数    
    //</summary>     
    public MySoapHeader()     
    {      }     
    //<summary>     
    //构造函数     
    //</summary>    
    //<param name="nUserID">用户ID</param>     
    //<param name="nPassWord">加密后的密码</param>     
    public MySoapHeader(string nUserID, string nPassWord)    
    {         
        Initial(nUserID, nPassWord);     
    }    
    #region 属性    
    //<summary>     
    //用户名     
    //</summary>     
    public string UserID     
    {         
        get { return _UserID;}         
        set { _UserID = value; }    
    }    
    //<summary>     
    //加密后的密码    
    //</summary>     
    public string PassWord     
    {         
        get { return _PassWord; }        
        set { _PassWord = value; }    
    }            
    #endregion    
    #region 方法     
    //<summary>     
    //初始化    
    //</summary>    
    //<param name="nUserID">用户ID</param>     
    //<param name="nPassWord">加密后的密码</param>    
    private void Initial(string nUserID, string nPassWord)   
    {        
        UserID = nUserID;        
        PassWord = nPassWord;  
    }     
    //<summary>    
    //验证用户名密码是否正确     
    //</summary>     
    //<param name="nUserID">用户ID</param>    
    //<param name="nPassWord">加密后的密码</param>   
    //<param name="nMsg">返回的错误信息</param>   
    //<returns>用户名密码是否正确</returns>    
    private bool IsValid(string nUserID, string nPassWord, out string nMsg)  
    {        
        nMsg = "";        
        try        
        {            
            //判断用户名密码是否正确             
            if (nUserID == "admin" && nPassWord == "admin")         
            {                  return true;              }             
            else        
            {               
                nMsg = "对不起,你无权调用此Web服务。";   
                return false;            
            }        
        }        
        catch      
        {            
            nMsg = "对不起,调用异常,你无权调用此Web服务。";     
            return false;      
        }   
    }   
    //<summary>    
    //验证用户名密码是否正确    
    //</summary>    
    //<returns>用户名密码是否正确</returns>   
    public bool IsValid(out string nMsg)   
    {        
        return IsValid(_UserID, _PassWord, out nMsg);    
    }   
    #endregion
}

 

 

(2)添加基于SoapHeader验证的Web Service接口方法:

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

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

    //声明Soap头实例          public MySoapHeader myHeader = new MySoapHeader();         

    public CabinDutyLeaderInfoWS () {

        //如果使用设计的组件,请取消注释以下行         //InitializeComponent();     }

    //需要SoapHeader验证        [SoapHeader("myHeader")]     [WebMethod]    public string HelloWorld() {        string msg = "";          //验证是否有权访问                 if (!myHeader.IsValid(out  msg))                {                         return msg;//返回错误信息                  }          return "Hello World";    }    }

 

 2.客户端调用具有SoapHeader的Web Service

 

//创建myService对象 
        DutyLeaderWebReference.CabinDutyLeaderInfoWS service = new CabinDutyLeaderInfoWS();
      
        //创建soap头对象 
        DutyLeaderWebReference.MySoapHeader header = new DutyLeaderWebReference.MySoapHeader(); 

        //设置soap头变量 
        header.PassWord = "admin"; 
        header.UserID = "admin"; 
        service.MySoapHeaderValue = header; 
        //调用web 方法 
        string strPrice = service.HelloWorld();
        this.lblTtxt.Text = strPrice;

 

通过SoapHeader对用户口令进行验证,只有授权的用户才可以使用该接口。确保了访问接口用户的安全性。

 

转自:http://book.51cto.com/art/200906/129769.htm

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值