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

WebService基于SoapHeader实现安全认证

本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。

1.首先要自定义SoapHeader,须继承System.Web.Services.Protocols.SoapHeader 。

using System;
using System.Collections.Generic;
using System.Web; /// <summary>
///自定义的SoapHeader
/// </summary>
public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
{ private string userName=string.Empty;
private string passWord=string.Empty; /// <summary>
/// 构造函数
/// </summary>
public MySoapHeader()
{ } /// <summary>
/// 构造函数
/// </summary>
/// <param name="userName">用户名</param>
/// <param name="passWord">密码</param>
public MySoapHeader(string userName, string passWord)
{
this.userName = userName;
this.passWord = passWord;
} /// <summary>
/// 获取或设置用户用户名
/// </summary>
public string UserName
{
get { return userName; }
set { userName = value; } } /// <summary>
/// 获取或设置用户密码
/// </summary>
public string PassWord
{
get { return passWord; }
set { passWord = value; }
}
}

2.添加WebService,并编写相应代码。

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services; /// <summary>
///WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{ //声明Soap头实例
public MySoapHeader myHeader=new MySoapHeader(); [System.Web.Services.Protocols.SoapHeader("myHeader")]
[WebMethod]
public string HelloWord()
{
//可以通过存储在数据库中的用户与密码来验证
if (myHeader.UserName.Equals("houlei")&myHeader.PassWord.Equals("houlei"))
{
return "调用服务成功!";
}
else
{
return "对不起,您没有权限调用此服务!";
}
}
}

3.客户端调用,分别使用不设置SoapHeader与设置SoapHeader。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace App
{
class Program
{
static void Main(string[] args)
{ localhost.WebService service = new localhost.WebService(); //没有设置SoapHeader的服务调用
Console.WriteLine("没有设置SoapHeader:" + service.HelloWord());
Console.WriteLine(); //将用户名与密码存入SoapHeader;
localhost.MySoapHeader header = new localhost.MySoapHeader();
header.UserName = "houlei";
header.PassWord = "houlei";
service.MySoapHeaderValue = header; //设置SoapHeader的服务调用
Console.WriteLine("设置SoapHeader:" + service.HelloWord());
Console.Read();
}
}
}

4.运行应用程序,查看运行结果。

再看一下直接通过浏览器的调用结果。

点击HelloWord调用Web服务,结果如下:

点击“调用”按钮,得到从服务器返回调用结果。

添加自定义SoapHeader可以成功调用WebService,否则不能调用WebService,从而实现对Web Service的非法调用。这种方法存在一定的弊端,就是在每一个WebService方法上都要进行一下验证,如果用户名与密码存储在数据库中,每调用一次WebService都要访问一次数据库进行用户名与密码的验证,对于频繁调用WebService来说,数据库压力很大。然而少量WebService调用这种方式还是一种不错的选择。

(作者:侯垒

WebService基于SoapHeader实现安全认证(一)的更多相关文章

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

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

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

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

  3. WebService基于SoapHeader实现安全认证(二)

    支持通过Http请求方法调用webservice,同时支持SoapHeader验证. using Globalegrow.Common; using Globalegrow.Model; using ...

  4. WebService基于soapheader的身份验证

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

  5. Webservice加上SoapHeader验证方式

    提供一种基于SoapHeader的自定义验证方式,代码如下: public class MySoapHeader : System.Web.Services.Protocols.SoapHeader ...

  6. C#调用Java的WebService添加SOAPHeader验证(2)

    C#调用Java的WebService添加SOAPHeader验证 上一篇链接如上,更像是 Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) 来处理xml, ...

  7. C#调用Java的WebService添加SOAPHeader验证

    C#调用Java的WebService添加SOAPHeader验证(2) 1.问题描述 调用的Java的webservice string Invoke(string func, string req ...

  8. .net 客户端调用java或.net webservice进行soapheader验证

    .net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...

  9. SharePoint 2013 配置基于AD的Form认证

    前 言 配置SharePoint 2013基于AD的Form认证,主要有三步: 1. 修改管理中心的web.config: 2. 修改STS Application的web.config: 3. 修改 ...

随机推荐

  1. ios开发之C语言第3天

    变量的命名规则以及规范 变量的命名规则  1>变量名只能由任意的字母,下划线和$以及数字组成,注意不能用数字开头 2>区分大小写 3>变量一定要先定义再使用 4>同一个大括号中 ...

  2. 7 -- Spring的基本用法 -- 8...

    7.8 深入理解容器中的Bean 7.8.1 抽象Bean与子Bean 把多个<bean.../>配置中相同的信息提取出来,集中成配置模版------这个配置模版并不是真正的Bean,因此 ...

  3. iOS分类中通过runtime添加动态属性

    这个的话并不是说  可以  在程序运行的时候   来几个 未知的东西  就添加什么  1 2 3 4 5的属性.而是可以在系统原有类的基础上  给那个类 集合实际的工程来添加你方便实用的东西.比如   ...

  4. LightOj_1287 Where to Run

    题目链接 题意: 有n个街口和m条街道, 你后边跟着警察,你需要进行大逃亡(又是大爱的抢银行啊),在每个街口你都有≥1个选择, 1)停留在原地5分钟. 2)如果这个街口可以到xi这个街口, 并且, 通 ...

  5. 使用SeaJS实现模块化JavaScript开发(新)

    本文转自张洋,因为SeaJS更新版本很快,所以原文中很多地方不太适用,在这里发布一个更新版. 前言   SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaSc ...

  6. SessionId

    http://www.codeweblog.com/session-cookie-jsessionid-url-rewriting/

  7. draw9patch超详细教程

    这篇文章是android开发人员的必备知识,内容摘选自网络,友我为大家整理和总结,不求完美,但是有用. 视频教程地址:http://player.youku.com/player.php/sid/XM ...

  8. Qt浅谈之三十九圆形进度条(已经有50篇了)

    http://blog.csdn.net/taiyang1987912/article/category/2314763

  9. 在windows下解压缩Linux内核源代码出现重复文件原因

    在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂     原因一.因为在Lin ...

  10. tomcat6 配置SSI 支持.shtml文件

    一.修改tomcat-6.0.36\conf\server.xml 文件: 把文件里 ssi 相关的 servlet .servlet-mapping .filter .filter-mapping注 ...