加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService基于SoapHeader实现安全认证

发布时间:2020-12-17 00:08:52 所属栏目:安全 来源:网络整理
导读:本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。 ? 1.首先要

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

?

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

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



?

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

using?System.Web.Services;??
  • ///?<summary>??
  • ///WebService?的摘要说明??
  • ///?</summary>??
  • [WebService(Namespace?=?"http://tempuri.org/")]??
  • [WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)]??
  • public?class?WebService?:?System.Web.Services.WebService??
  • {??
  • ????//声明Soap头实例??
  • ????public?MySoapHeader?myHeader?=?new?MySoapHeader();??
  • ????[System.Web.Services.Protocols.SoapHeader("myHeader")]??
  • ????[WebMethod]??
  • ????public?string?HelloWord()??
  • ????????//可以通过存储在数据库中的用户与密码来验证??
  • ????????if?(myHeader.UserName.Equals("houlei")?&?myHeader.PassWord.Equals("houlei"))??
  • ????????{??
  • ????????????return?"调用服务成功!";??
  • ????????}??
  • ????????else??
  • ????????????return?"对不起,您没有权限调用此服务!";??

  • ?

    3.客户端调用,分别使用不设置SoapHeader与设置SoapHeader。

    using?System.Linq;??
  • using?System.Text;??
  • namespace?App??
  • ????class?Program??
  • ????????static?void?Main(string[]?args)??
  • ????????????localhost.WebService?service?=?new?localhost.WebService();??
  • ????????????//没有设置SoapHeader的服务调用??
  • ????????????Console.WriteLine("没有设置SoapHeader:"?+?service.HelloWord());??
  • ????????????Console.WriteLine();??
  • ????????????//将用户名与密码存入SoapHeader;??
  • ????????????localhost.MySoapHeader?header?=?new?localhost.MySoapHeader();??
  • ????????????header.UserName?=?"houlei";??
  • ????????????header.PassWord?=?"houlei";??
  • ????????????service.MySoapHeaderValue?=?header;??
  • ????????????//设置SoapHeader的服务调用??
  • ????????????Console.WriteLine("设置SoapHeader:"?+?service.HelloWord());??
  • ????????????Console.Read();??
  • ????????}??
  • }??
  • ?

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

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读