.NET中 webservice加密简谈(基础1)
在博客园都呆了几年了,一直都是看各位大神的文章。自己从来也没亲自写多点点。本码农打算从今年去也开始写写文章,打打基础,以备不时の需。废话不多说了,开始进入正题。高手就可以不用看了。仅是给新人看的。哈哈
- 加密目的:webservice最后部署了无非就是一个URL地址。只要知道地址就能够看到响应的结果。所以给webservice设置了访问用户和密码。增强安全性,使它只能被授权的用户使用。
- 集体实现过程如下:
(1):打开VS2010建立解决方案(WService20150106)(PageBaseWebservice.asmx)(个人觉得VS在大了推荐大家使用WCF,还是什么其他原因没有在创建的时候直接找到webservice项目,可以先创建一个空的ASP.net 项目,在添加就能找到webservice)。代码如下注释很清楚。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Services; 6 7 namespace Webservice2015 8 { 9 /// <summary> 10 /// PageBaseWebservice 的摘要说明 11 /// </summary> 12 [WebService(Namespace = "http://tempuri.org/")] 13 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 14 [System.ComponentModel.ToolboxItem(false)] 15 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 16 // [System.Web.Script.Services.ScriptService] 17 public class PageBaseWebservice : System.Web.Services.WebService 18 { 19 20 public MySoapHeader _MySoapHeader;// 定义一个变量 21 /// <summary> 22 /// 重点是这个类是继承System.Web.Services.Protocols.SoapHeader 这是关键。加密就全靠这个了 23 /// </summary> 24 public class MySoapHeader : System.Web.Services.Protocols.SoapHeader 25 { 26 #region 27 /// <summary> 28 /// 用户名 29 /// </summary> 30 private string _name; 31 public string Name 32 { 33 get { return _name; } 34 set { _name = value; } 35 } 36 /// <summary> 37 /// 秘密 38 /// </summary> 39 private string _password; 40 public string Password 41 { 42 get { return _password; } 43 set { _password = value; } 44 } 45 #endregion 46 47 /// <summary> 48 /// 无参数的构造函数 49 /// </summary> 50 public MySoapHeader() 51 { 52 } 53 /// <summary> 54 /// 带参数的构造函数 55 /// </summary> 56 /// <param name="Name">参数用户名</param> 57 /// <param name="Password">参数秘密</param> 58 public MySoapHeader(string Name, string Password) 59 { 60 this.Name = Name; 61 this.Password = Password; 62 } 63 } 64 65 [WebMethod(Description = "验证权限", CacheDuration = 0, BufferResponse = true)] 66 [System.Web.Services.Protocols.SoapHeader("_MySoapHeader")] 67 public bool Validation() 68 { 69 /// 判断用户名 和密码 是否正确。 这里仅做测试。用户名和密码 可以写在配置文件中。 70 if (_MySoapHeader.Name == "KG" && _MySoapHeader.Password=="123456") 71 // 匹配成功 72 return true; 73 //匹配失败 74 return false; 75 } 76 } 77 }
(2):在创建一个WebServiceTest.asmx。这个和(1)中PageBaseWebservice.asmx 是继承关系。PageBaseWebservice 继承自 System.Web.Services.WebService。WebServiceTest 是继承PageBaseWebservice。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; namespace Webservice2015 { /// <summary> /// WebServiceTest 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class WebServiceTest : PageBaseWebservice { [WebMethod(Description = "验证测试", CacheDuration = 0, BufferResponse = true)] // 加上标记 [System.Web.Services.Protocols.SoapHeader("_MySoapHeader")] public string HelloWorld() { if (Validation())// 验证 { return "Hello World"; } else { return "你没权限"; } } } }
(3):建立一个控制台程序。在添加引用。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { /// 服务 ServiceReference1.WebServiceTestSoapClient webclient = new ServiceReference1.WebServiceTestSoapClient(); /// soap 下面就是要传过过去用户名和密码 ServiceReference1.MySoapHeader my = new ServiceReference1.MySoapHeader(); my.Name = "KG"; my.Password = "123456"; /// my 做为一个参数传过去。 string str= webclient.HelloWorld(my); Console.Write(str); Console.ReadKey(); } } }
(4):结果只有正确输入的时候才能返回helloword。否则返回的是没有权限。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。