通過SoapHeader來增強Web Service的安全性

taogchan發表於2013-07-18

通過SoapHeader來增強Web Service的安全性

1.Web Service實現步驟

  首先引入名稱空間
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols;  //對soap Head引用新增的名稱空間

(1)定義自己的SoapHeader派生類。

public class MyHeader : System.Web.Services.Protocols.SoapHeader
    {
        private string _UserID = string.Empty;
        private string _PassWord = string.Empty;

        ///


        /// 建構函式
        ///

        public MyHeader()
        {

        }

        ///


        /// 建構函式
        ///

        /// 使用者ID
        /// 加密後的密碼
        public MyHeader(string nUserID, string nPassWord)
        {
            Initial(nUserID, nPassWord);
        }

 

        #region 屬性

        ///


        /// 使用者名稱
        ///

        public string UserID
        {
            get { return _UserID; }
            set { _UserID = value; }
        }

        ///


        /// 加密後的密碼
        ///

        public string PassWord
        {
            get { return _PassWord; }
            set { _PassWord = value; }
        }

        #endregion

        #region 方法
        ///


        /// 初始化
        ///

        /// 使用者ID
        /// 加密後的密碼
        public void Initial(string nUserID, string nPassWord)
        {
            UserID = nUserID;
            PassWord = nPassWord;
        }

        ///

       
        /// 使用者名稱密碼是否正確
        ///

        /// 使用者ID
        /// 加密後的密碼
        /// 返回的錯誤資訊
        /// 使用者名稱密碼是否正確
        public bool IsValid(string nUserID, string nPassWord, out string nMsg)
        {
            nMsg = "";
            try
            {
                //判斷使用者名稱密碼是否正確
                if (nUserID == "admin" && nPassWord == "admin")
                {
                    return true;
                }
                else
                {
                    nMsg = "對不起,你無權呼叫此Web服務,可能有如下原因:/n 1.您的帳號被管理員禁用。/n 2.您的帳號密碼不正確";
                    return false;
                }
            }

            catch
            {
                nMsg = "對不起,你無權呼叫此Web服務,可能有如下原因:/n 1.您的帳號被管理員禁用。/n 2.您的帳號密碼不正確";
                return false;
            }

        }

        ///


        /// 使用者名稱密碼是否正確
        ///

        /// 使用者名稱密碼是否正確
        public bool IsValid(out string nMsg)
        {

            return IsValid(_UserID, _PassWord, out nMsg);
        }
        #endregion
    }
(2)新增基於SoapHeader驗證的Web Service介面方法:

///


    /// myService 的摘要說明
    ///

    //[WebService(Namespace="
http://MyServer/MyWebServices/")]
    public class myService : System.Web.Services.WebService
    {

        ///


        /// Soap頭例項
        ///

        public MyHeader myHeader = new MyHeader();  //例項化SoapHead

        public myService()
        {
            //CodeGenerated: 自動生成的程式碼,該呼叫是 ASP.NET Web 服務設計器所必需的
            InitializeComponent();
        }

 

        #region 元件設計器生成的程式碼
        //Web 服務設計器所必需的
        private IContainer components = null;

        ///


        /// 設計器支援所需的方法 - 不要使用程式碼編輯器修改
        /// 此方法的內容。
        ///

        private void InitializeComponent()
        {

        }

        ///


        /// 清理所有正在使用的資源
        ///

        protected override void Dispose(bool disposing)
        {
            if (disposing && components != null)
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #endregion
        // WEB 服務示例
        // HelloWorld() 示例服務返回字串 Hello World
        // 若要生成,請取消註釋下列行,然後儲存並生成專案
        // 若要測試此 Web 服務,請按 F5 鍵


        ///


        /// 正常呼叫的方法
        ///

        ///
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        ///


        /// 需要驗證的方法,新增SoapHeader標識
        ///

        ///
        ///
        [SoapHeader("myHeader")]
        [WebMethod(Description = "HelloWord", EnableSession = true)]
        public string HelloWorld2(string contents)
        {
            string msg = "";
            //驗證是否有權訪問
            if (!myHeader.IsValid(out msg))
                return msg;

            return "Hello World:" + contents;
        }
    }
 
2.客戶端呼叫具有SoapHeader的Web Service
       //建立myService物件
        StudySoapHead.myService service =  new StudySoapHead.myService();
        //建立soap頭物件
        StudySoapHead.MyHeader header=new StudySoapHead.MyHeader();
        //設定soap頭變數
        header.PassWord = "admin";
        header.UserID = "admin";
        service.myHeader = header;
        //呼叫web 方法
        Console.WriteLine(service.HelloWorld());
        Console.WriteLine(service.HelloWorld2("Valid request!"));
        Console.Read();

通過SoapHeader對使用者口令進行驗證,只有授權的使用者才可以使用該介面。確保了訪問介面使用者的安全性。

  轉自:http://blog.csdn.net/dongxinxi/article/details/6305656#comments

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-766626/,如需轉載,請註明出處,否則將追究法律責任。

相關文章