調用WebService時加入身份驗證,以拒絕未授權的訪問


 眾所周知,WebService是為企業需求提供的在線應用服務,其他公司或應用軟件能夠通過Internet來訪問並使用這項在線服務。但在有些時候的某些應用服務不希望被未授權訪問,那么此時我們可以一下幾種方法來實現身份驗證。

 

方法一:在WebService中引入SoapHeader

[c-sharp]  view plain copy
  1. #region 配置登錄標頭  
  2. /// <summary>  
  3. /// Code CreateBy BanLao  
  4. /// </summary>  
  5. public class MySoapHeader : SoapHeader  
  6. {  
  7.     private string strUserName = string.Empty;  
  8.     private string strPassWord = string.Empty;  
  9.   
  10.     public MySoapHeader() { }  
  11.   
  12.     public MySoapHeader(string username, string password)  
  13.     {  
  14.         this.strUserName = username;  
  15.         this.strPassWord = password;  
  16.     }  
  17.  
  18.     #region 構造 用戶名|密碼  
  19.     /// <summary>  
  20.     /// 用戶名  
  21.     /// </summary>  
  22.     public string UserName  
  23.     {  
  24.         get { return strUserName; }  
  25.         set { strUserName = value; }  
  26.     }  
  27.     /// <summary>  
  28.     /// 密碼  
  29.     /// </summary>  
  30.     public string PassWord  
  31.     {  
  32.         get { return strPassWord; }  
  33.         set { strPassWord = value; }  
  34.     }  
  35.  
  36.     #endregion  
  37.  
  38.     #region 檢測是否正確登錄  
  39.     /// <summary>  
  40.     /// 檢測是否正確登錄  
  41.     /// </summary>  
  42.     /// <returns></returns>  
  43.     public bool CheckLogin()  
  44.     {  
  45.         if (strUserName == "合法登錄名" && strPassWord == "合法登錄密碼")  
  46.         {  
  47.             return true;  
  48.         }  
  49.         else  
  50.         {  
  51.             return false;  
  52.         }  
  53.     }  
  54.  
  55.     #endregion  
  56. }  
  57. #endregion  

 

 

加入一個服務用於測試:

 

[c-sharp]  view plain copy
  1. #region 測試連接  
  2.  [System.Web.Services.Protocols.SoapHeader("myHeader")]  
  3.  [WebMethod(Description = "判斷用戶是否開通", EnableSession = true)]  
  4.  public string _GetValue(string strInputValue)  
  5.  {  
  6.      if (myHeader.CheckLogin())  
  7.      {  
  8.          string strReturnValue = strInputValue + "@CopyRight By BanLao 2010";  
  9.          return strReturnValue;  
  10.      }  
  11.      else  
  12.      {  
  13.          return "無效的身份驗證,請重試!";  
  14.      }  
  15.  }  
  16.  #endregion  

 

 

至此我們想要的需要通過身份驗證的服務配置好了,下面讓我們進行一些測試,新建一個webForm在Page_Load中:

  

[c-sharp]  view plain copy
  1. WebLogon.MySoapHeader myHeader = new WebLogon.MySoapHeader();  
  2. myHeader.UserName = "約定的合法用戶";  
  3. myHeader.PassWord = "約定的合法密碼";  
  4.   
  5. WebLogon.Service This_Service = new WebLogon.Service();  
  6. This_Service.MySoapHeaderValue = myHeader;  
  7. Response.Write(This_Service._GetValue("This is BanLao's Test Application For SoapHeader. "));  

 

 

當運行這個WebForm時,如果用戶名和密碼是正確的我們將看到:

 

This is BanLao's Test Application For SoapHeader. @CopyRight By BanLao 2010

 

否則

 

無效的身份驗證,請重試!

 

 

方法二:Web Service以Session方式驗證

 

[c-sharp]  view plain copy
  1. [WebMethod(Description = "檢測是否正確登錄", EnableSession = true)]  
  2. public bool CheckLogin(string strUserName, string strPassword)  
  3. {  
  4.     if (strUserName.Equals("admin") && strPassword.Equals("123456"))  
  5.     {  
  6.         Session["LoginState"] = true;  
  7.     }  
  8.     else  
  9.     {  
  10.         Session["LoginState"] = false;  
  11.     }  
  12.     return (bool)Session["LoginState"];  
  13. }  
  14.  
  15. #region 測試連接  
  16. [WebMethod(Description = "測試連接", EnableSession = true)]  
  17. public string _GetValue(string strInputValue)  
  18. {  
  19.     if (Session["LoginState"] == null || Session["LoginState"].Equals(false))  
  20.     {  
  21.         return "無效的身份驗證,請重試!";  
  22.     }  
  23.     else  
  24.     {  
  25.         string strReturnValue = strInputValue + "@CopyRight By BanLao 2010";  
  26.         return strReturnValue;  
  27.     }  
  28. }  
  29. #endregion  

 

 

調用該服務,

 

[c-sharp]  view plain copy
  1. WebLogon.Service This_Service = new WebLogon.Service();  
  2. This_Service.CookieContainer = new System.Net.CookieContainer();  
  3. if (This_Service.CheckLogin("admin", "123456"))  
  4. {  
  5.     Response.Write(This_Service._GetValue("This is BanLao's Test Application For Session. "));  
  6. }  

 

 

當運行這個WebForm時,如果用戶名和密碼是正確的我們將看到:

 

This is BanLao's Test Application For Session. @CopyRight By BanLao 2010

 

否則

 

無效的身份驗證,請重試!

 

 

注:如果需要多個合法用戶,可以在WebService中聲明判斷即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM