您现在的位置: 365建站网 > 365文章 > WebService基于SoapHeader实现安全认证

WebService基于SoapHeader实现安全认证

文章来源:365jz.com     点击数:2740    更新时间:2009-09-13 10:55   参与评论

WebService基于SoapHeader实现安全认证 

      本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。

1.首先要自定义SoapHeader,须继承System.Web.Services.Protocols.SoapHeader

</>code

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web;
  4. /// <summary>
  5. ///自定义的SoapHeader
  6. /// </summary>
  7. public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
  8. {
  9. private string userName=string.Empty;
  10. private string passWord=string.Empty;
  11. /// <summary>
  12. /// 构造函数
  13. /// </summary>
  14. public MySoapHeader()
  15. {
  16. }
  17. /// <summary>
  18. /// 构造函数
  19. /// </summary>
  20. /// <param name="userName">用户名</param>
  21. /// <param name="passWord">密码</param>
  22. public MySoapHeader(string userName, string passWord)
  23. {
  24. this.userName = userName;
  25. this.passWord = passWord;
  26. }
  27. /// <summary>
  28. /// 获取或设置用户用户名
  29. /// </summary>
  30. public string UserName
  31. {
  32. get { return userName; }
  33. set { userName = value; }
  34. }
  35. /// <summary>
  36. /// 获取或设置用户密码
  37. /// </summary>
  38. public string PassWord
  39. {
  40. get { return passWord; }
  41. set { passWord = value; }
  42. }
  43. }

2.添加WebService,并编写相应代码。

</>code

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web;
  4. using System.Web.Services;
  5. /// <summary>
  6. ///WebService 的摘要说明
  7. /// </summary>
  8. [WebService(Namespace = "http://tempuri.org/")]
  9. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  10. public class WebService : System.Web.Services.WebService
  11. {
  12. //声明Soap头实例
  13. public MySoapHeader myHeader=new MySoapHeader();
  14. [System.Web.Services.Protocols.SoapHeader("myHeader")]
  15. [WebMethod]
  16. public string HelloWord()
  17. {
  18. //可以通过存储在数据库中的用户与密码来验证
  19. if (myHeader.UserName.Equals("houlei")&myHeader.PassWord.Equals("houlei"))
  20. {
  21. return "调用服务成功!";
  22. }
  23. else
  24. {
  25. return "对不起,您没有权限调用此服务!";
  26. }
  27. }
  28. }
3.客户端调用,分别使用不设置SoapHeader与设置SoapHeader。

</>code

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace App
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. localhost.WebService service = new localhost.WebService();
  12. //没有设置SoapHeader的服务调用
  13. Console.WriteLine("没有设置SoapHeader:" + service.HelloWord());
  14. Console.WriteLine();
  15. //将用户名与密码存入SoapHeader;
  16. localhost.MySoapHeader header = new localhost.MySoapHeader();
  17. header.UserName = "houlei";
  18. header.PassWord = "houlei";
  19. service.MySoapHeaderValue = header;
  20. //设置SoapHeader的服务调用
  21. Console.WriteLine("设置SoapHeader:" + service.HelloWord());
  22. Console.Read();
  23. }
  24. }
  25. }

4.运行应用程序,查看运行结果。

image

再看一下直接通过浏览器的调用结果。

image

点击HelloWord调用Web服务,结果如下:

image

点击“调用”按钮,得到从服务器返回调用结果。

image

      添加自定义SoapHeader可以成功调用WebService,否则不能调用WebService,从而实现对Web Service的非法调用。这种方法存在一定的弊端,就是在每一个WebService方法上都要进行一下验证,如果用户名与密码存储在数据库中,每调用一次WebService都要访问一次数据库进行用户名与密码的验证,对于频繁调用WebService来说,数据库压力很大。然而少量WebService调用这种方式还是一种不错的选择。

(作者:侯垒)
Tag标签: asp.net,WebService,SoapHeader

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (2740人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号