频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

5.6.1 Web服务身份验证

作者: 马恒太等著 出处:电子工业出版社博文视点  2007-12-21 10:59    砖    好    评论   进入论坛
阅读提示:《Web服务安全》第5章详细的介绍了Web服务安全认证和访问控制机制。本文主要介绍的是Web服务身份验证。
5.6  Web服务访问控制实践
 
5.6.1  Web服务身份验证

在Windows系统中,Web服务访问控制还没有独立的实现方式,它和IIS的访问控制绑定在一起,主要是通过身份验证的方式实现。

1.集成Windows身份验证

集成身份验证是NTLM,即NT局域网管理,它产生的用户名和密码都使用hash运算保护。
编写一个Web服务,代码如下:
 
[WebMethod]
public string HelloStr(string name)
{
return "Hello "+name;
}
配置该IIS需要集成Windows身份验证。

调用该服务,同时加上身份验证(使用的用户名为“test”,对应的口令为“test001”),代码如下:
 
WebTest.Service1 webtest=new WSApplication.WebTest.Service1();  
//生成一个新的调用服务类型
NetworkCredential credential=new NetworkCredential("test","test001"," ");
webtest.Credentials=credential;   //带上身份验证信息
string ret=webtest.HelloStr("张三");
MessageBox.Show(ret);
 
编译执行以上代码,即可实现集成身份验证。
 
注意:这样的调用方式只适合Windows系统,即调用服务者必须是Windows系统;如果是UNIX系统,则不会成功。
 
2.基本身份验证

基本过程和集成Windows身份验证方式不同的是,其用户名和密码都使用明文方式传输。

基本验证方法是使用较广泛的一种,它是用来收集用户名和密码信息的业界标准方法。

使用基本验证的优点是其属于HTTP规格的一部分,并且支持大部分的浏览器;其缺点是使用基本验证以未加密的格式来传输密码,浏览器只对该验证信息采取了base64编码而已。

3.SOAP头验证信息

如果用户需要自己定义的验证信息,可以通过在SOAP头中加入相关的信息,下面介绍实现的几种情况。

(1)Web服务处理SOAP头信息

Web服务处理SOAP头信息即在Web服务中定义处理SOAP头信息的处理程序。

【例14】 Web服务程序要求用户输入用户名和口令,同时将用户名和密码返回给服务请求者。
服务程序如下:
[SoapHeader("myHeader")]
[WebMethod]
public string HelloWorld()
{
return "hello :"+myHeader.UserID+myHeader.UserPW;
}
public class MyHeader: System.Web.Services.Protocols.SoapHeader
{
private string _UserID=string.Empty;   //用户名
private string _UserPW=string.Empty;   //用户密码
public MyHeader()
{
public string UserID
{
get{return _UserID;}
set{_UserID=value;}
}
public string UserPW
{
get{return _UserPW;}
set{_UserPW=value;}
}
}
 
请求程序如下:
 
private void menuItem4_Click(object sender, System.EventArgs e)
{
MessageBox.Show("Soap头测试实验!");
string ret;
SoapHeader.MyHeader myHeader=new WSApplication.SoapHeader. MyHeader();
myHeader.UserID="yanxuexiong";
myHeader.UserPW="zhangqiao";
SoapHeader.SoapHeader headertest=new WSApplication.SoapHeader. 
SoapHeader();
headertest.MyHeaderValue=myHeader;
ret=headertest.HelloWorld();
MessageBox.Show(ret);
}

客户端的执行结果如图5-17所示。
图5-17 客户端执行结果
 
(2)手工添加SOAP头基本原理

上面的情况适合于Web服务程序来处理SOAP头消息,有时需要用户手工添加相关的SOAP头信息。

当添加一个服务引用时,就会自动生成一个reference.cs的文件,这个文件即为与服务交互的客户端代理程序。如果需要发送相关的SOAP头,那么在该文件中就会有如下与SOAP头相关的定义。

①  SOAP头类定义。即定义一个SOAP头结构,主要包括头中包含的元素,该类从System.Web.Services. Protocols.SoapHeader类继承而来。例如:
 
//添加的自己的SOAP头结构
public class SoapHeader1 :System.Web.Services.Protocols.SoapHeader
{
public string UserID;
public string PassWord;
}

②  SOAP头变量声明。即在reference.cs生成的服务对象类中添加一个头变量,该变量是定义的头类的一个对象。例如:
public SoapHeader1 soapheader1;  //手工加上的SOAP头
 
③  SOAP头属性声明。该操作即通知客户端代理,在发送SOAP请求消息时带上相关的头消息。例如:
 
[System.Web.Services.Protocols.SoapHeaderAttribute("soapheader1")]  
     //添加头的声明

如果需要添加多个头,则需要多行声明,每一行声明一个头属性。

(3)简单实例

引用服务http:// 192.192.192.73 /WSSoapTest2 /SoapHeaderTest2.asmx,该服务SOAP消息中不需要SOAP头。通过上面的基本步骤,即可添加相关的SOAP头。修改后的代码如下:
 

//-------------------------------------------------------------------

// <autogenerated>

//     This code was generated by a tool.

//     Runtime Version: 1.1.4322.2032

//

//     Changes to this file may cause incorrect behavior and will be lost

//     if the code is regenerated.

// </autogenerated>

//-------------------------------------------------------------------

 

//

// 此源代码是由 Microsoft.VSDesigner 1.1.4322.2032 版自动生成

//

namespace WSApplication.SoapTest2 {

    using System.Diagnostics;

    using System.Xml.Serialization;

    using System;

    using System.Web.Services.Protocols;

    using System.ComponentModel;

    using System.Web.Services;

   

   

    /// <remarks/>

    [System.Diagnostics.DebuggerStepThroughAttribute()]

    [System.ComponentModel.DesignerCategoryAttribute("code")]

    [System.Web.Services.WebServiceBindingAttribute(Name="Service1Soap", Namespace="http://tempuri.org/")]

    public class Service1:System.Web.Services.Protocols.SoapHttpClientProtocol{

        public SoapHeader1 soapheader1;  //手工添加的SOAP

       

        /// <remarks/>

        public Service1() {

            this.Url = "http://192.192.192.73/WSSoapTest2/SoapHeaderTest2. asmx";

        }

       

        /// <remarks/>

        ///

        [System.Web.Services.Protocols.SoapHeaderAttribute("soapheader1")]   //添加的头声明

 

[System.Web.Services.Protocols.SoapDocumentMethodAttribute ("http://tempuri.org/HelloWorld", RequestNamespace="http:// tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System. Web.Services.Description. SoapBindingUse.Literal, ParameterStyle= System.Web.Services.Protocols. SoapParameterStyle.Wrapped)]

        public string HelloWorld() {

            object[] results = this.Invoke("HelloWorld", new object[0]);

            return ((string)(results[0]));

        }

       

        /// <remarks/>

        public System.IAsyncResult BeginHelloWorld(System.AsyncCallback callback, object asyncState) {

            return this.BeginInvoke("HelloWorld", new object[0], callback, asyncState);

        }

       

        /// <remarks/>

        public string EndHelloWorld(System.IAsyncResult asyncResult) {

            object[] results = this.EndInvoke(asyncResult);

            return ((string)(results[0]));

        }

 

 
(4)效果分析

添加SOAP头结构并不会影响对服务的请求结果,如果对方服务没有相应的头处理程序,则忽略这些头结构。

通过监视程序可以看到发送的请求中已经包含了添加的SOAP头,如下:
 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:// www.w3.org/2001/XMLSchema">

<soap:Header>

<SoapHeader1 xmlns="http://tempuri.org/">

<UserID>yanxuexiong</UserID>

<PassWord>zhangqiao</PassWord>

</SoapHeader1>

</soap:Header>

<soap:Body>

<HelloWorld xmlns="http://tempuri.org/" />

</soap:Body>

</soap:Envelope>

 
【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
专题
Windows Home Server 家用服务器专题
安全防范与策略
服务器维护与应用基础
服务器基础知识入门
垃圾邮件新对策:远程定制托管服务
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
浏览器的战国时代
浏览器的战国时代
ARP攻击防范与解决方案
ARP攻击防范与解决方案
NAC安全访问控制
NAC安全访问控制
· NAC安全访问控制
· 网络布线测试仪器
· Windows Server 2008专..
· Windows远程桌面应用
· 网络故障排除宝典
· 运营商封堵ADSL共享 中..
· 解析35岁技术人的价值..
· 世纪枭雄比尔盖茨的王..
· 主流品牌防火墙配置
· ASP.NET开发教程
· 超级计算机TOP500专题
· Vista SP1对决XP SP3
· SQL Server 2008/2005..
· 程序员如何成长?
· C#技术开发指南
· 虚拟化技术还有点“虚”
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Windows远程桌面应用
· C#技术开发指南
· Apache技术专题
· Windows集群服务应用
· C#技术开发指南
· 国际文档格式标准开战
· 路由器设置与口令恢复
· Linux 集群技术专题
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· C#技术开发指南
· 三层交换技术专题
· Apache技术专题
· C#技术开发指南
· Windows远程桌面应用
· 企业数据恢复指南
· Windows集群服务应用
· 路由器设置与口令恢复
· Linux 集群技术专题
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用