查看: 783|回复: 0

[.NET开发] WebService基于soapheader的身份验证

发表于 2018-3-25 09:29:47

用WebService开发接口十分方便。但接口提供的数据不应是对所有人可见的,我们来利用SoapHeader写一个简单的身份验证Demo

目录

  • 创建WebService项目(带SoapHeader)
  • 利用IIS发布WebService
  • 添加服务引用并利用SoapHeader验证访问接口的例子

一、创建WebService项目

  以VisualStudio2010为例,创建asp.net空Web应用程序

  在WSTest项目下添加类,命名为“SoapHeaderHelper”

  代码如下:

  1. 1 using System;
  2. 2 using System.Collections.Generic;
  3. 3 using System.Linq;
  4. 4 using System.Web;
  5. 5
  6. 6 namespace WSTest
  7. 7 {
  8. 8 public class SoapHeaderHelper : System.Web.Services.Protocols.SoapHeader
  9. 9 {
  10. 10 private string username = string.Empty;
  11. 11 private string pwd = string.Empty;
  12. 12
  13. 13 public string UserName
  14. 14 {
  15. 15 get { return username; }
  16. 16 set { username = value; }
  17. 17 }
  18. 18 public string PWD
  19. 19 {
  20. 20 get { return pwd; }
  21. 21 set { pwd = value; }
  22. 22 }
  23. 23 public SoapHeaderHelper()
  24. 24 { }
  25. 25 public SoapHeaderHelper(string name, string password)
  26. 26 {
  27. 27 username = name;
  28. 28 pwd = password;
  29. 29 }
  30. 30
  31. 31 private bool IsValid(string nUserId, string nPassWord, out string nMsg)
  32. 32 {
  33. 33 nMsg = "";
  34. 34 try
  35. 35 {
  36. 36 //此处从数据库验证授权信息
  37. 37 if (nUserId == "admin" && nPassWord == "admin")
  38. 38 {
  39. 39
  40. 40 return true;
  41. 41 }
  42. 42 else
  43. 43 {
  44. 44 nMsg = "对不起,您无权调用Web服务";
  45. 45 return false;
  46. 46 }
  47. 47 }
  48. 48 catch
  49. 49 {
  50. 50 nMsg = "对不起,您无权调用Web服务";
  51. 51 return false;
  52. 52 }
  53. 53 }
  54. 54 public bool IsValid(out string nMsg)
  55. 55 {
  56. 56 return IsValid(username, pwd, out nMsg);
  57. 57 }
  58. 58 }
  59. 59 }
复制代码

在WSTest项目下新建项“Web服务”,后缀为asmx

代码如下:

  1. 1 using System;
  2. 2 using System.Collections.Generic;
  3. 3 using System.Data;
  4. 4 using System.IO;
  5. 5 using System.Linq;
  6. 6 using System.Web;
  7. 7 using System.Web.Services;
  8. 8 using System.Runtime.Serialization;
  9. 9 using System.Text;
  10. 10 using System.Web.Services.Protocols;
  11. 11 using System.Xml;
  12. 12
  13. 13 namespace WSTest
  14. 14 {
  15. 15
  16. 16 /// <summary>
  17. 17 /// WebService1 的摘要说明
  18. 18 /// </summary>
  19. 19 [WebService(Namespace = "http://localhost/")]
  20. 20 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  21. 21 [System.ComponentModel.ToolboxItem(false)]
  22. 22 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
  23. 23 // [System.Web.Script.Services.ScriptService]
  24. 24 public class WebService1 : System.Web.Services.WebService
  25. 25 {
  26. 26
  27. 27 public SoapHeaderHelper soapheader = new SoapHeaderHelper();
  28. 28 //该方法不进行身份验证,任何人都可访问
  29. 29 [WebMethod]
  30. 30 public string HelloWorld()
  31. 31 {
  32. 32
  33. 33 return "Hello World";
  34. 34 }
  35. 35
  36. 36 //该地方是调用SoapHeader地方,注意观察
  37. 37 [SoapHeader("soapheader")]
  38. 38 [WebMethod]
  39. 39 public string HelloWorld2()
  40. 40 {
  41. 41 string msg = "";
  42. 42 if (!soapheader.IsValid(out msg))
  43. 43 {
  44. 44 return msg;
  45. 45 }
  46. 46 return "Hello World2";
  47. 47 }
  48. 48 }
  49. 49 }
复制代码

二、利用IIS发布WebService

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

打开IIS管理器

右击网站->添加网站

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

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

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

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

引用完成后的目录结构

在Program.cs内添加如下代码:

  1. 1 using System;
  2. 2 using System.Collections.Generic;
  3. 3 using System.Linq;
  4. 4 using System.Text;
  5. 5 using System.Xml;
  6. 6
  7. 7 namespace WSClient
  8. 8 {
  9. 9 class Program
  10. 10 {
  11. 11 static void Main(string[] args)
  12. 12 {
  13. 13
  14. 14 ServiceReference1.WebService1SoapClient sr = new ServiceReference1.WebService1SoapClient();
  15. 15 //无身份验证的HelloWorld
  16. 16 var demo1 = sr.HelloWorld();
  17. 17 Console.WriteLine("demo1:"+demo1);
  18. 18 //有身份验证的HelloWorld2,但请求接口时不携带身份信息
  19. 19 var demo2 = sr.HelloWorld2(null);
  20. 20 Console.WriteLine("demo2:" + demo2);
  21. 21 //有身份验证的HelloWordl2,利用soapHeader提交身份信息
  22. 22 ServiceReference1.SoapHeaderHelper soapHeader = new ServiceReference1.SoapHeaderHelper();
  23. 23 soapHeader.UserName = "admin";
  24. 24 soapHeader.PWD = "admin";
  25. 25 var demo3 = sr.HelloWorld2(soapHeader);
  26. 26 Console.WriteLine("demo3:" + demo3);
  27. 27 Console.ReadKey();
  28. 28 }
  29. 29 }
  30. 30 }
复制代码

执行结果:

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



回复

使用道具 举报