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调用这种方式还是一种不错的选择

时间: 2024-12-30 04:39:57

WebService基于SoapHeader实现安全认证的相关文章

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

支持通过Http请求方法调用webservice,同时支持SoapHeader验证. using Globalegrow.Common; using Globalegrow.Model; using System.Web; using System.Web.Services.Protocols; namespace Globalegrow.Service { /// <summary> /// 自定义SoapHeader类. /// </summary> public class

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

最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader. 借此机会,顺便整理一下调用.net webservice 和 java webservice 的验证方式,记录下来. .net端web服务 1.若web服务是采用.net webservice实现,如下代码: /// </summary> [WebService(Namespace = "http://tempuri.org/&quo

spring security基于数据库表进行认证

我们从研究org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl.class的源码开始 public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService, MessageSourceAware { //默认的用户查询sql public static final String DEF_USERS_BY_USERNAME_QUERY = "

利用OpenSSH实现基于秘钥的认证

利用OpenSSH实现基于秘钥的认证 SSH协议介绍:     SSH是Secure Shell的缩写,意思是安全的shell          目前版本有 ssh v1和ssh  v2:在目前工作中大多都使用ssh v2版,ssh  v1已经不安全,尽量不使用              ssh v1:基于CRC-----32做MAC(Message Authentication Code),不安全              ssh v2:基于双方主机的协商最安全的MAC的方式:基于DH算法做秘

sharepoint:基于AD的FORM认证

//来源:http://www.cnblogs.com/jindahao/archive/2012/05/07/2487351.html 需求: 1. 认证要基于AD 2. 登入方式要页面的方式(form) 3. 添加自定义验证逻辑 方案: 根据需求可以很快明白,实际就是个“基于AD的FORM认证”.具体步骤如下: 1. 修改web.config 添加“<connectionStrings>” <connectionStrings> <add name="ADCon

SharePoint 2013 配置基于AD的Form认证

前 言 配置SharePoint 2013基于AD的Form认证,主要有三步: 1. 修改管理中心的web.config: 2. 修改STS Application的web.config: 3. 修改Web应用程序的web.config并开启FBA: 首先,修改CA的web.config,一般在不知道端口号的时候(因为创建CA的时候,即使我们修改了端口号,创建后也会使用默认的那个,但是访问却使用我们填写的那个),我们选择在IIS中找到CA文件路径,如下图: 通常我们应该先进行web.config

Web Server 在iis上部署webservice基于oracle

在iis上部署webservice基于oracle 常见错误及解决方案: 原因: 先安装.netframework后安装iis造成的: 解决方案: 1.C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 错误: System.BadImageFormatException: 未能加载文件或程序集“BLLWebService”或它的某一个依赖项.试图加载格式不正确的程序. 解决方案: 应用程序池-高级设置-启用32位

linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建

1.FTP协议:有命令和数据连接两种 命令连接,控制连接:21/tcp 数据连接: 主动模式,运行在20/tcp端口 和 被动模式,运行在随机端口 数据传输模式(自动模式):有二进制(mp3,jpg等)和文本(html)两种传输模式 ftp服务器端程序:wu-ftpd:vsftpd pureftpd Filezilla Serv-U ftp客户端程序:CLI文本模式命令:ftp lftp GUI图形界面软件:gftpd FlashFXP Cuteftp Filezilla vsftpd:命名为V

将 Shiro 作为应用的权限基础 二:基于SpringMVC实现的认证过程

认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一.认证过程 1.收集实体/凭据信息 Java代码 UsernamePasswordToken token = new UsernamePasswordToken(username, password); token.setRememberMe(true); UsernamePasswordToken支