WebService基于soapheader的身份验证

时间:2023-03-09 14:34:56
WebService基于soapheader的身份验证

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

目录

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

一、创建WebService项目

  以VisualStudio2010为例,创建ASP.NET空Web应用程序

WebService基于soapheader的身份验证

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

  代码如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace WSTest
{
public class SoapHeaderHelper : System.Web.Services.Protocols.SoapHeader
{
private string username = string.Empty;
private string pwd = string.Empty; public string UserName
{
get { return username; }
set { username = value; }
}
public string PWD
{
get { return pwd; }
set { pwd = value; }
}
public SoapHeaderHelper()
{ }
public SoapHeaderHelper(string name, string password)
{
username = name;
pwd = password;
} private bool IsValid(string nUserId, string nPassWord, out string nMsg)
{
nMsg = "";
try
{
//此处从数据库验证授权信息
if (nUserId == "admin" && nPassWord == "admin")
{ return true;
}
else
{
nMsg = "对不起,您无权调用Web服务";
return false;
}
}
catch
{
nMsg = "对不起,您无权调用Web服务";
return false;
}
}
public bool IsValid(out string nMsg)
{
return IsValid(username, pwd, out nMsg);
}
}
}

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

WebService基于soapheader的身份验证

代码如下:

 using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Runtime.Serialization;
using System.Text;
using System.Web.Services.Protocols;
using System.Xml; namespace WSTest
{ /// <summary>
/// WebService1 的摘要说明
/// </summary>
[WebService(Namespace = "http://localhost/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{ public SoapHeaderHelper soapheader = new SoapHeaderHelper();
//该方法不进行身份验证,任何人都可访问
[WebMethod]
public string HelloWorld()
{ return "Hello World";
} //该地方是调用SoapHeader地方,注意观察
[SoapHeader("soapheader")]
[WebMethod]
public string HelloWorld2()
{
string msg = "";
if (!soapheader.IsValid(out msg))
{
return msg;
}
return "Hello World2";
}
}
}

二、利用IIS发布WebService

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

WebService基于soapheader的身份验证

打开IIS管理器

右击网站->添加网站

WebService基于soapheader的身份验证

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

WebService基于soapheader的身份验证

WebService基于soapheader的身份验证

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

WebService基于soapheader的身份验证

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

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

WebService基于soapheader的身份验证

WebService基于soapheader的身份验证

引用完成后的目录结构

WebService基于soapheader的身份验证

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml; namespace WSClient
{
class Program
{
static void Main(string[] args)
{ ServiceReference1.WebService1SoapClient sr = new ServiceReference1.WebService1SoapClient();
//无身份验证的HelloWorld
var demo1 = sr.HelloWorld();
Console.WriteLine("demo1:"+demo1);
//有身份验证的HelloWorld2,但请求接口时不携带身份信息
var demo2 = sr.HelloWorld2(null);
Console.WriteLine("demo2:" + demo2);
//有身份验证的HelloWordl2,利用soapHeader提交身份信息
ServiceReference1.SoapHeaderHelper soapHeader = new ServiceReference1.SoapHeaderHelper();
soapHeader.UserName = "admin";
soapHeader.PWD = "admin";
var demo3 = sr.HelloWorld2(soapHeader);
Console.WriteLine("demo3:" + demo3);
Console.ReadKey();
}
}
}

执行结果:

WebService基于soapheader的身份验证

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