欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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应用程序

WebService基于soapheader的身份验证

  在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

WebService基于soapheader的身份验证

代码如下:

 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

右击项目->发布->发布项目选择“文件系统”->选择一个路径->点击发布

WebService基于soapheader的身份验证

打开IIS管理器

右击网站->添加网站

 WebService基于soapheader的身份验证

与发布普通网站不同的是,需要添加一个默认路径

WebService基于soapheader的身份验证

WebService基于soapheader的身份验证

添加完成后就可以通过浏览器访问到该服务

WebService基于soapheader的身份验证

三、添加服务引用并利用SoapHeader验证访问接口的例子

 创建新项目->控制台应用程序->命名为WSClient->右击引用->添加服务引用

WebService基于soapheader的身份验证

WebService基于soapheader的身份验证

引用完成后的目录结构

WebService基于soapheader的身份验证

在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 }

执行结果:

WebService基于soapheader的身份验证

 

 demo下载:https://github.com/FB208/Blog_WebServiceDemo