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

目录

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

一、创建WebService项目

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

  在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

代码如下:

 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

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

打开IIS管理器

右击网站->添加网站

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

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

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

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

引用完成后的目录结构

在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();
}
}
}

执行结果:

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

WebService基于soapheader的身份验证的更多相关文章

  1. WebService基于SoapHeader实现安全认证

    本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使 ...

  2. WebService基于SoapHeader实现安全认证(一)

    本文转载:http://www.cnblogs.com/houleixx/archive/2009/08/22/webservice-soapheader-security.html WebServi ...

  3. WebService基于SoapHeader实现安全认证[webservice][.net][安全][soapheader]

    摘 自: http://blog.sina.com.cn/s/blog_72b7a82d0100yyp8.html WebService基于SoapHeader实现安全认证[webservice][. ...

  4. 基于 Token 的身份验证方法

    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Toke ...

  5. 基于Token的身份验证——JWT

    初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...

  6. (转)基于 Token 的身份验证

    原文:https://ninghao.net/blog/2834 最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,G ...

  7. 基于 Token 的身份验证:JSON Web Token(附:Node.js 项目)

    最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强, ...

  8. 基于token的身份验证JWT

    传统身份验证的方法 HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用.这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下 ...

  9. [转载]基于 Token 的身份验证

    作者:王皓发布于:2015-08-07 22:06更新于:2015-08-07 22:07 最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twit ...

随机推荐

  1. python——进制间的转换

    int(string_num, n)  string_num表示某种进制的字符串,n表示string_num是什么进制数 2.8.16 进制转为10进制:使用int()或者eval() 10 进制转为 ...

  2. AspNetPager控件的简单使用

    1.首先引用这个控件. 在前台页面上修改一些属性. <webdiyer:AspNetPager ID=" AlwaysShow="true" FirstPageTe ...

  3. 【bzoj1965】[Ahoi2005]SHUFFLE 洗牌 - 快速幂

    为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行 ...

  4. POJ 1061 青蛙的约会【扩欧】

    题意: 两只青蛙在地球同一纬度不同位置x,y向同一方向跳,每只青蛙跳的长度不同m,n,纬线总长度l,问两只青蛙是否能相遇,跳几次才相遇. 分析: 可知,问题可转化为求(m−n)∗a≡(y−x)(mod ...

  5. [bzoj2463][中山市选2009]谁能赢呢?_博弈论

    博弈论 bzoj-2463 中山市选-2009 题目大意:题目链接. 注释:略. 想法: 如果$n$是偶数的话就可以被多米诺骨牌恰好覆盖,这样的话只需要先手先走向(1,1)对应的第二段,后者必定会将棋 ...

  6. cogs——73. 找最佳通路

    73. 找最佳通路 ★☆   输入文件:city.in   输出文件:city.out   简单对比时间限制:1 s   内存限制:128 MB 问题描述有 n 个 城市,它们之间的交通情况已知.现在 ...

  7. 用JQ实现基础的添加,插入,删除功能。

    在eclipse里面运行代码即可,如果您是其他应用,请选择对您有帮助的代码即可,如果有写错或不懂的地方请联系QQ:1633420056,谢谢,祝学习进步 <!DOCTYPE html>&l ...

  8. Redis基于客户端分片的集群案例(待实践)

    说明: 下面的示例基本都是基于Linux去实现,目的是为了环境的统一,以便于把性能调整到最优.且基于Java.建议生产环境不要使用Windows/Mac OS这些. 在Java领域,基于客户端进行分片 ...

  9. SQL PATINDEX检索

    语法格式:PATINDEX ( '%pattern%' , expression ) 返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算. pattern字符串在 ...

  10. js 计算获取鼠标相对某个点的移动旋转角度

    // 旋转角度 function getAngle(cen, first, second) { // cen : 中心点 [0,0] // first : 开始点 [1,3] // second : ...