基于SOAP头的Web服务身份验证技术

时间:2022-03-15 11:05:37

基于SOAP头的Web服务身份验证技术

摘要:介绍基于SOAP头的Web服务身份验证技术,并通过具体示例说明在.NET平台下的编程模式。

关键词:Web服务;SOAP头;身份验证;ASP.NE;C#

中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)04-0849-02

Authentication Technology of Web Services Based on SOAP Header

LU Shou-dong

(Department of Computer And Information Management, Guangxi University of Finance and Economics, Nanning 530003, China)

Abstract: This paper introduces the authentication technology of Web Services based on SOAP header, and explains its programming pattern under .NET plat through the concrete example.

Key words:Web Services; SOAP Header; Authentication; ; C#

Web服务(Web Services)是目前最为流行的应用于异构环境的分布式组件开发技术。作为一种部署在Web上的可编程访问的对象,如何确保其安全性是在具体应用中必须考虑的一个重要问题。为控制对Web服务的合法访问,对服务使用者的身份进行验证是很有必要的。本文主要介绍一种基于SOAP头的Web服务身份验证技术,并通过具体示例说明其编程模式。

1 Web服务简介

Web服务是一种通过网络进行、发现、调用的自描述的服务器端软件组件,其实现依赖于一系列的标准协议或规范(如图1所示),包括HTTP、XML、SOAP、WSDL、UDDI等。简言之,Web服务以XML与XML Schema为数据编码格式与数据类型标准,使用WSDL进行描述,使用UDDI进行与发现,使用SOAP进行访问,并通过HTTP等进行传输。Web服务的上层核心标准都是基于XML的,具有优异的跨平台特性,这为Web服务在异构平台上进行系统的集成与交互提供了充分的保证。

2 SOAP协议概况

SOAP即简单对象访问协议(Simple Object Access Protocol),是一种基于XML的、简单的、轻量级的通信协议,用于在客户端与Web服务之间传递消息(包括请求消息与响应消息)。

SOAP协议使用XML描述消息。一个SOAP消息其实是一个XML文档,包括Envelope(SOAP信封)、Header(SOAP头)、Body(SOAP体)3个元素。其中,Envelope是整个SOAP消息的根元素,是必须的;Header是SOAP消息是可选元素,若存在,则必须是Envelope的第一个直接子元素;Body是SOAP消息必须有的元素,而且是Envelope的直接子元素,用于包含Web服务的调用信息(如所调用方法的名称及有关参数等)或响应信息以及相关的错误信息。SOAP消息的结构如图2所示。

在SOAP消息中,SOAP体的使用是由SOAP协议规定,而SOAP头的使用则较为灵活,可由用户根据需要进行定制。通常,可在SOAP头中添加一些条目,以包含具体应用所必须的重要信息(如账户信息、事务标识等),并据此实现相应的功能。

3 基于SOAP头的身份验证

通过在SOAP头中添加适当的验证信息,并由Web服务的进行读取与处理,即可实现对服务使用者的身份验证。在此,以 Web服务为例,说明基于SOAP头的Web服务身份验证技术。

3.1 基本步骤

Web服务允许定义并处理SOAP头条目,其基本步骤为:

1) 创建一个继承自SoapHeader的类AuthSoapHeader,该类的名称与公共成员变量即为SOAP头条目元素的名称与内容子元素。

2) 在Web服务类中声明一个AuthSoapHeader类的公共变量MyASH。

3) 为Web服务的有关方法应用SoapHeader属性,并将其MemberName属性设置为MyASH。

4) 在应用了SoapHeader属性的Web服务方法中访问MyASH的成员变量,并完成相应的处理过程。

相应地,在调用Web服务的客户端,可通过以下基本步骤设置SOAP头条目:

1) 创建一个Web服务的实例变量MyAService。

2) 创建一个AuthSoapHeader类的实例变量MyASHeader,并为其成员变量赋值。

3) 将MyASHeader赋给MyAService.AuthSoapHeaderValue(即设置SOAP头条目),并调用Web服务的有关方法以完成相应的功能。

3.2 应用示例

如图3所示,为一系统登录表单,用于对系统用户进行身份验证,其验证过程是通过调用Web服务完成的,而用户名与密码则通过SOAP 头进行传送。为简单起见,该示例假定用户名与密码均非空串时即为合法。单击“确定”按钮后,若为合法用户,则提示信息显示为“Success”,否则为“Failure”。下面,简述该示例的设计要点。

1) Web服务AuthService的设计

在Visual Studio .NET中使用 Web服务模板新建一个Visual C#项目AuthService,并将Service1.asmx重命名为Authentication.asmx,然后在Authentication.asmx.cs中编写相应的代码。关键代码如下:

……

using System.Web.Services.Protocols;

namespace AuthService {

public class AuthSoapHeader : SoapHeader {

public string Username;

public string Password; }

[WebService(Namespace="/webservices")]

public class AuthService : System.Web.Services.WebService {

……

public AuthSoapHeader MyASH;

[WebMethod]

[SoapHeader("MyASH")]

public string AuthenticateUser() {

if (MyASH==null)

return "Failure!";

if (VerifyUser(MyASH.Username,MyASH.Password))

return "Success";

return "Failure"; }

private bool VerifyUser(string Username,string Password) {

if ((Username!="")&&(Password!=""))

return true;

return false;

} } }

2) 客户端Login.aspx的设计

① 在Visual Studio .NET中使用 Web应用程序模板新建一个Visual C#项目AuthClient。

② 添加对Web服务AuthService的Web引用,并命名为Authentication。

③ 将WebForm1.aspx重命名为Login.aspx,同时设计好其界面(如图3所示),主要包括用户名文本框TB_Username、密码文本框TB_Password、提示信息标签L_Message与“确定”按钮。

④ 为Login.aspx.cs添加功能代码。

首先,引用命名空间AuthClient.Authentication:

using AuthClient.Authentication;

然后,编写“确定”按钮的单击事件代码:

AuthService MyAService=new AuthService();

AuthSoapHeader MyASHeader=new AuthSoapHeader();

MyASHeader.Username=TB_Username.Text;

MyASHeader.Password=TB_Password.Text;

MyAService.AuthSoapHeaderValue=MyASHeader;

L_Message.Text="提示信息:"+MyAService.AuthenticateUser()+".";

4 结束语

SOAP头为Web服务及其客户端之间关键数据的传递提供了一种灵活且有效的途径,有利于实现身份验证、事务处理等特殊功能。文中所述,即为利用SOAP头对Web服务使用者进行身份验证的关键技术与与典型模式。

参考文献:

[1] 石国志 Web服务实用案例教程[M].北京:清华大学出版社,2004.

[2] 佛里曼,琼斯.Microsoft .NET XML Web服务程序设计[M].向璐,向祚铁,译.北京:清华大学出版社,2003.

上一篇:嵌入式WAP浏览器的架构及实现 下一篇:基于PIC16F876的电动自行车控制器设计