微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐