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

posted @ 2018-02-27 15:42  FB208  阅读(999)  评论(0编辑  收藏  举报