调用WebService时加入身份验证,以拒绝未授权的访问

众所周知,WebService是为企业需求提供的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。但在有些时候的某些应用服务不希望被未授权访问,那么此时我们可以一下几种方法来实现身份验证。

 

方法一:在WebService中引入SoapHeader

 

[c-sharp] view plain copy print ?
  1. #region 配置登录标头
  2. /// <summary>
  3. /// Code CreateBy BanLao
  4. /// </summary>
  5. publicclass MySoapHeader : SoapHeader
  6. {
  7. privatestring strUserName = string.Empty;
  8. privatestring 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. publicstring UserName
  20. {
  21. get { return strUserName; }
  22. set { strUserName = value; }
  23. }
  24. /// <summary>
  25. /// 密码
  26. /// </summary>
  27. publicstring PassWord
  28. {
  29. get { return strPassWord; }
  30. set { strPassWord = value; }
  31. }
  32. #endregion
  33. #region 检测是否正确登录
  34. /// <summary>
  35. /// 检测是否正确登录
  36. /// </summary>
  37. /// <returns></returns>
  38. publicbool CheckLogin()
  39. {
  40. if (strUserName == "合法登录名" && strPassWord == "合法登录密码")
  41. {
  42. returntrue;
  43. }
  44. else
  45. {
  46. returnfalse;
  47. }
  48. }
  49. #endregion
  50. }
  51. #endregion

#region 配置登录标头 /// <summary> /// Code CreateBy BanLao /// </summary> public class MySoapHeader : SoapHeader { private string strUserName = string.Empty; private string strPassWord = string.Empty; public MySoapHeader() { } public MySoapHeader(string username, string password) { this.strUserName = username; this.strPassWord = password; } #region 构造 用户名|密码 /// <summary> /// 用户名 /// </summary> public string UserName { get { return strUserName; } set { strUserName = value; } } /// <summary> /// 密码 /// </summary> public string PassWord { get { return strPassWord; } set { strPassWord = value; } } #endregion #region 检测是否正确登录 /// <summary> /// 检测是否正确登录 /// </summary> /// <returns></returns> public bool CheckLogin() { if (strUserName == "合法登录名" && strPassWord == "合法登录密码") { return true; } else { return false; } } #endregion } #endregion

 

 

 

加入一个服务用于测试:

 

 

[c-sharp] view plain copy print ?
  1. #region 测试连接
  2. [System.Web.Services.Protocols.SoapHeader("myHeader")]
  3. [WebMethod(Description = "判断用户是否开通", EnableSession = true)]
  4. publicstring _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

#region 测试连接 [System.Web.Services.Protocols.SoapHeader("myHeader")] [WebMethod(Description = "判断用户是否开通", EnableSession = true)] public string _GetValue(string strInputValue) { if (myHeader.CheckLogin()) { string strReturnValue = strInputValue + "@CopyRight By BanLao 2010"; return strReturnValue; } else { return "无效的身份验证,请重试!"; } } #endregion

 

 

 

至此我们想要的需要通过身份验证的服务配置好了,下面让我们进行一些测试,新建一个webForm在Page_Load中:

 

 

[c-sharp] view plain copy print ?
  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. "));

WebLogon.MySoapHeader myHeader = new WebLogon.MySoapHeader(); myHeader.UserName = "约定的合法用户"; myHeader.PassWord = "约定的合法密码"; WebLogon.Service This_Service = new WebLogon.Service(); This_Service.MySoapHeaderValue = myHeader; 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 print ?
  1. [WebMethod(Description = "检测是否正确登录", EnableSession = true)]
  2. publicbool 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. publicstring _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

[WebMethod(Description = "检测是否正确登录", EnableSession = true)] public bool CheckLogin(string strUserName, string strPassword) { if (strUserName.Equals("admin") && strPassword.Equals("123456")) { Session["LoginState"] = true; } else { Session["LoginState"] = false; } return (bool)Session["LoginState"]; } #region 测试连接 [WebMethod(Description = "测试连接", EnableSession = true)] public string _GetValue(string strInputValue) { if (Session["LoginState"] == null || Session["LoginState"].Equals(false)) { return "无效的身份验证,请重试!"; } else { string strReturnValue = strInputValue + "@CopyRight By BanLao 2010"; return strReturnValue; } } #endregion

 

 

 

调用该服务,

 

 

[c-sharp] view plain copy print ?
  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. }

WebLogon.Service This_Service = new WebLogon.Service(); This_Service.CookieContainer = new System.Net.CookieContainer(); if (This_Service.CheckLogin("admin", "123456")) { Response.Write(This_Service._GetValue("This is BanLao's Test Application For Session. ")); }

 

 

 

当运行这个WebForm时,如果用户名和密码是正确的我们将看到:

 

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

 

否则

 

无效的身份验证,请重试!

 

 

注:如果需要多个合法用户,可以在WebService中声明判断即可~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值