1. 程式人生 > >調用WebService時加入身份驗證,以拒絕未授權的訪問

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

trre size 登錄 p s 服務配置 ext details current return

眾所周知,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. public MySoapHeader() { }
  10. public MySoapHeader(string username, string password)
  11. {
  12. this.strUserName = username;
  13. this.strPassWord = password;
  14. }
  15. #region 構造 用戶名|密碼
  16. /// <summary>
  17. /// 用戶名
  18. /// </summary>
  19. public string UserName
  20. {
  21. get { return strUserName; }
  22. set { strUserName = value; }
  23. }
  24. /// <summary>
  25. /// 密碼
  26. /// </summary>
  27. public string PassWord
  28. {
  29. get { return strPassWord; }
  30. set { strPassWord = value; }
  31. }
  32. #endregion
  33. #region 檢測是否正確登錄
  34. /// <summary>
  35. /// 檢測是否正確登錄
  36. /// </summary>
  37. /// <returns></returns>
  38. public bool CheckLogin()
  39. {
  40. if (strUserName == "合法登錄名" && strPassWord == "合法登錄密碼")
  41. {
  42. return true;
  43. }
  44. else
  45. {
  46. return false;
  47. }
  48. }
  49. #endregion
  50. }
  51. #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. WebLogon.Service This_Service = new WebLogon.Service();
  5. This_Service.MySoapHeaderValue = myHeader;
  6. 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. #region 測試連接
  15. [WebMethod(Description = "測試連接", EnableSession = true)]
  16. public string _GetValue(string strInputValue)
  17. {
  18. if (Session["LoginState"] == null || Session["LoginState"].Equals(false))
  19. {
  20. return "無效的身份驗證,請重試!";
  21. }
  22. else
  23. {
  24. string strReturnValue = strInputValue + "@CopyRight By BanLao 2010";
  25. return strReturnValue;
  26. }
  27. }
  28. #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中聲明判斷即可

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