WebService基于soapheader的身份验证
程序员文章站
2022-06-25 18:57:34
用WebService开发接口十分方便。但接口提供的数据不应是对所有人可见的,我们来利用SoapHeader写一个简单的身份验证Demo 目录 创建WebService项目(带SoapHeader) 利用IIS发布WebService 添加服务引用并利用SoapHeader验证访问接口的例子 一、创 ......
用WebService开发接口十分方便。但接口提供的数据不应是对所有人可见的,我们来利用SoapHeader写一个简单的身份验证Demo
目录
- 创建WebService项目(带SoapHeader)
- 利用IIS发布WebService
- 添加服务引用并利用SoapHeader验证访问接口的例子
一、创建WebService项目
以VisualStudio2010为例,创建ASP.NET空Web应用程序
在WSTest项目下添加类,命名为“SoapHeaderHelper”
代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace WSTest 7 { 8 public class SoapHeaderHelper : System.Web.Services.Protocols.SoapHeader 9 { 10 private string username = string.Empty; 11 private string pwd = string.Empty; 12 13 public string UserName 14 { 15 get { return username; } 16 set { username = value; } 17 } 18 public string PWD 19 { 20 get { return pwd; } 21 set { pwd = value; } 22 } 23 public SoapHeaderHelper() 24 { } 25 public SoapHeaderHelper(string name, string password) 26 { 27 username = name; 28 pwd = password; 29 } 30 31 private bool IsValid(string nUserId, string nPassWord, out string nMsg) 32 { 33 nMsg = ""; 34 try 35 { 36 //此处从数据库验证授权信息 37 if (nUserId == "admin" && nPassWord == "admin") 38 { 39 40 return true; 41 } 42 else 43 { 44 nMsg = "对不起,您无权调用Web服务"; 45 return false; 46 } 47 } 48 catch 49 { 50 nMsg = "对不起,您无权调用Web服务"; 51 return false; 52 } 53 } 54 public bool IsValid(out string nMsg) 55 { 56 return IsValid(username, pwd, out nMsg); 57 } 58 } 59 }
在WSTest项目下新建项“Web服务”,后缀为asmx
代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.IO; 5 using System.Linq; 6 using System.Web; 7 using System.Web.Services; 8 using System.Runtime.Serialization; 9 using System.Text; 10 using System.Web.Services.Protocols; 11 using System.Xml; 12 13 namespace WSTest 14 { 15 16 /// <summary> 17 /// WebService1 的摘要说明 18 /// </summary> 19 [WebService(Namespace = "http://localhost/")] 20 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 21 [System.ComponentModel.ToolboxItem(false)] 22 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 23 // [System.Web.Script.Services.ScriptService] 24 public class WebService1 : System.Web.Services.WebService 25 { 26 27 public SoapHeaderHelper soapheader = new SoapHeaderHelper(); 28 //该方法不进行身份验证,任何人都可访问 29 [WebMethod] 30 public string HelloWorld() 31 { 32 33 return "Hello World"; 34 } 35 36 //该地方是调用SoapHeader地方,注意观察 37 [SoapHeader("soapheader")] 38 [WebMethod] 39 public string HelloWorld2() 40 { 41 string msg = ""; 42 if (!soapheader.IsValid(out msg)) 43 { 44 return msg; 45 } 46 return "Hello World2"; 47 } 48 } 49 }
二、利用IIS发布WebService
右击项目->发布->发布项目选择“文件系统”->选择一个路径->点击发布
打开IIS管理器
右击网站->添加网站
与发布普通网站不同的是,需要添加一个默认路径
添加完成后就可以通过浏览器访问到该服务
三、添加服务引用并利用SoapHeader验证访问接口的例子
创建新项目->控制台应用程序->命名为WSClient->右击引用->添加服务引用
引用完成后的目录结构
在Program.cs内添加如下代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml; 6 7 namespace WSClient 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 14 ServiceReference1.WebService1SoapClient sr = new ServiceReference1.WebService1SoapClient(); 15 //无身份验证的HelloWorld 16 var demo1 = sr.HelloWorld(); 17 Console.WriteLine("demo1:"+demo1); 18 //有身份验证的HelloWorld2,但请求接口时不携带身份信息 19 var demo2 = sr.HelloWorld2(null); 20 Console.WriteLine("demo2:" + demo2); 21 //有身份验证的HelloWordl2,利用soapHeader提交身份信息 22 ServiceReference1.SoapHeaderHelper soapHeader = new ServiceReference1.SoapHeaderHelper(); 23 soapHeader.UserName = "admin"; 24 soapHeader.PWD = "admin"; 25 var demo3 = sr.HelloWorld2(soapHeader); 26 Console.WriteLine("demo3:" + demo3); 27 Console.ReadKey(); 28 } 29 } 30 }
执行结果:
demo下载:https://github.com/FB208/Blog_WebServiceDemo
上一篇: 红旗6.0sp1 分辨率调整解决方案
下一篇: 四个 Linux 下的“护眼”软件解析