`

WebService的几种验证方式

阅读更多

1.1 WebService设计

1.1.1 传输基本参数

1.1.2 传输数据集合

(1) 数组

(2) DataSet

1.2 WebService异常处理

1.3 WebService性能

1.4 WebService认证

请参考 WebService认证学习报告

1.4.1 各种认证方式

1.4.1.1 Windows认证

(1) 配置 IIS WebService文件的权限为集成 Windows认证

(2) 设置 Web.Config

<authentication mode= "Windows">

</authentication>

1.4.2 跟踪用户访问

1.5 WebService调用

1.5.1 Windows认证

(1) NT认证使用时, Credentials必须指定 System.Net.CredentialCache.DefaultCredentials

当设置为 default ,客户端根据服务端配置决定采用 NTLM认证还是其他的安全认证

(2) 实例化 WebService对象

(3) 添加 WebService认证信息

(4) 调用 WebService方法

LocalTest.GIISService localTest = new LocalTest.GIISService();

CredentialCache credentialCache = new CredentialCache();

NetworkCredential credentials = new NetworkCredential("XuJian", "password", "Snda");

credentialCache.Add(new Uri("http://localhost/GIIS/ GIISService.asmx"),

"Basic", credentials);

localTest.Credentials = credentialCache;

string tt = localTest.Hello("ssssssss");

1.6 GIIS中WebService 认证实现

该部分为本次 GIIS中实现的认证方式,考虑到相关配置、维护性,不涉及其他认证方式的处理

1.6.1 实现方式

SOAP Header + DES加解密 + Windows认证

1.6.2 实现原理

(1) SOAP Header

SOAP包括四个部分: SOAP封装 (envelop),定义描述消息

SOAP编码规则

SOAP RPC 调用和应答协定

SOAP 绑定,底层协议交换信息

其中 envelop由一个或多个 Header和一个 Body组成, Header元素的每一个子元素称为一个 SOAP Header

(2) DES对称加解密

通过 Client端传输过来的已加密编码,在客户端进行解码分析,实现认证,认证的 user信息来自于 GIIS的系统登录用户列表

对编码和解码的字节类型存储在 Web.Config文件中,要保持一致并对称,且字符长度需设为 8

(3) 集成 Windows认证

作为域用户可以通过该方式来调用、处理 WebService,但非域用户看通过我们自定义的 SOAP Header方式来验证

1.6.3 实现步骤( SOAP

(1) 设置 .asmx文件的访问权限为“集成 Windows认证”,不允许匿名访问

(2) 创建 WebService认证类 CredentialSoapHeader.cs,继承 SoapHeader

*调用者的信息从系统维护的 WscUser表中获取

namespace XXX.WebService

{

public class CredentialSoapHeader : System.Web.Services.Protocols.SoapHeader

{

#region -- Private Attribute --

private string m_UserID = string .Empty;

private string m_Password = string .Empty;

#endregion

#region -- Private Attribute --

/// <summary>

/// user id

/// </summary>

public string UserID

{

get

{

return m_UserID;

}

set

{

m_UserID = value ;

}

}

/// <summary>

/// user password

/// </summary>

public string PassWord

{

get

{

return m_Password;

}

set

{

m_Password = value ;

}

}

#endregion

/// <summary>

/// initial user id and papssword

/// </summary>

/// <param name="userID"> user id </param>

/// <param name="password"> user password </param>

public void Initial(string userID,string password)

{

UserID = userID;

PassWord = password;

}

/// <summary>

/// check user when use web service

/// </summary>

/// <param name="userID"> user id </param>

/// <param name="password"> user password </param>

/// <param name="message"> return message </param>

/// <returns></returns>

public bool IsValid(string userID,string password,out string message)

{

message = "" ;

try

{

string userName = Encrypt.DecryptClient(userID);

string userPassword = Encrypt.DecryptClient(password);

Entity.GiWscuser userAuthority = new Entity.GiWscuser();

userAuthority.QueryMode = true ;

userAuthority.Active += true ;

userAuthority.Account += userName.Trim();

userAuthority.Password += userPassword.Trim();

DataTable dtblUser = userAuthority.Query(

new String[] {userAuthority.Account, userAuthority.Password }, false , -1).Tables[0];

if (dtblUser.Rows.Count > 0)

{

return true ;

}

else

{

message = "sorry, you have no access authority for current web service" ;

return false ;

}

}

catch (Exception ex)

{

message = "sorry, you have no access authority for current web service " + ex.Message;

return false ;

}

}

/// <summary>

/// check user authority

/// </summary>

/// <param name="message"> message tip </param>

/// <returns></returns>

public bool IsValid(out string message)

{

return IsValid(m_UserID,m_Password,out message);

}

}

}

(3) 创建 DES加解密类,实现明文编码与解码

public class Encrypt

{

private static string ms_Key = System.Configuration.ConfigurationManager.AppSettings["EncryptKey" ];

private static string ms_IV = System.Configuration.ConfigurationManager.AppSettings["EncryptIV" ];

/// <summary>

/// Encrypt a string

/// </summary>

/// <param name="ecryptString"> string needs to be encrypted </param>

/// <returns> the encrypted string </returns>

public static string EncryptClient(string ecryptString)

{

if (ecryptString != "" )

{

DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider ();

cryptoProvider.Key = ASCIIEncoding .ASCII.GetBytes(ms_Key);

cryptoProvider.IV = ASCIIEncoding .ASCII.GetBytes(ms_IV);

MemoryStream memoryStream = new MemoryStream ();

CryptoStream cryptoStream = new CryptoStream (memoryStream,

cryptoProvider.CreateEncryptor(), CryptoStreamMode .Write);

StreamWriter streamWriter = new StreamWriter (cryptoStream);

streamWriter.Write(ecryptString);

streamWriter.Flush();

cryptoStream.FlushFinalBlock();

memoryStream.Flush();

return Convert .ToBase64String(memoryStream.GetBuffer(),0,Int32 .Parse(memoryStream.Length.ToString()));

}

else

{

return "" ;

}

}

/// <summary>

/// Decrypt a string

/// </summary>

/// <param name="decryptString"> string needs to be decrypted </param>

/// <returns> the decrypted string </returns>

public static string DecryptClient(string decryptString)

{

if (decryptString != "" )

{

DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider ();

cryptoProvider.Key = ASCIIEncoding .ASCII.GetBytes(ms_Key);

cryptoProvider.IV = ASCIIEncoding .ASCII.GetBytes(ms_IV);

Byte [] buffer = Convert .FromBase64String(decryptString);

MemoryStream memoryStream = new MemoryStream (buffer);

CryptoStream cryptoStream = new CryptoStream (memoryStream, cryptoProvider.CreateDecryptor(), CryptoStreamMode .Read);

StreamReader streamReader = new StreamReader (cryptoStream);

return streamReader.ReadToEnd();

}

else

{

return "" ;

}

}

(4) CredentialSoapHeader类中实现用户认证信息的解码与合法性检查,给出异常时的提示信息

CredentialSoapHeade的代码

(5) 在目标 Service类中实例化 CredentialSoapHeader对象,并指定该对象为 WebService方法的修饰

Namespace WebServiceAuthority

{

[WebService(Namespace = "http://tempuri.org/" )]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class GIISService : System.Web.Services.WebService

{

public CredentialSoapHeader myHeader = new CredentialSoapHeader();

/// <summary>

/// get web service information by authority user

/// </summary>

/// <param name="contents"> customize content </param>

/// <returns></returns>

[SoapHeader("myHeader" )]

[WebMethod(Description = "authority set for Web Service" , EnableSession = true )]

public string HelloWorld(string contents)

{

string message = "" ;

if (!myHeader.IsValid(out message))

return message;

return "Hello World:" + contents;

}

}

}

1.6.4 Client端调用方法( SOAP

(1) 添加 WebService引用

URL地址为对应的 GIIS WebService地址,引用的别名自定义

(2) 实例化一个 WebService的类对象

LocalService.GIISService localTest = new LocalService.GIISService();

(3) 设置 Credentials方式

localTest.Credentials = System.Net.CredentialCache.DefaultCredentials;

(4) 传递编码后的密文

(5) 调用 WebService提供的方法

(6) 实现代码如下:

LocalService.GIISService localTest = new LocalService.GIISService();

localTest.Credentials = System.Net.CredentialCache.DefaultCredentials;//default credetials

LocalService.CredentialSoapHeader header = new LocalService.CredentialSoapHeader();//Create SOAP header

header.UserID = userName;//Set SOAP header user name information

header.PassWord = userPassword;//Set SOAP header user password information

localTest.CredentialSoapHeaderValue = header;

this .Label1.Text = localTest.HelloWorld("ss" );

至此已实现 GIIS中的 WebService验证,如单独采用 Windows认证请参见下面的说明

分享到:
评论

相关推荐

    WebServiceStudio webservice测试工具

    首先,Web服务是一种通过互联网提供应用程序功能的方式,它使用开放标准(如XML、SOAP和WSDL)来实现不同系统之间的通信。XML(可扩展标记语言)用于数据表示,SOAP(简单对象访问协议)是传输这些数据的协议,而...

    Axis2创建webservice服务的方式之POJO方式

    创建Axis2 Web服务的POJO方式主要包括以下几个步骤: 1. **定义服务接口和服务实现**:首先,你需要创建一个Java接口,定义你的服务方法。接着,编写一个实现了这个接口的Java类,作为服务的具体实现。 2. **添加...

    WebService方式的系统更新程序程序.rar

    WebService是一种跨平台、跨语言的通信标准,它允许不同系统间的应用程序通过网络交换数据,因此在系统更新场景下,WebService可以作为服务器端向客户端分发更新内容的桥梁。 首先,我们要理解WebService的基本原理...

    c++调用webservice(包括静态和动态以及webservice源码)

    本篇文章将详细讲解如何在C++中调用WebService,包括静态和动态方式,并探讨相关的源码实现。 首先,让我们理解什么是WebService。WebService是一种基于XML的开放标准,允许不同平台和应用程序之间进行互操作。它...

    webservice测试

    Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的系统之间进行数据交换和功能调用。在本项目中,通过运行名为"webservicTest"的主程序,我们可以对WebService进行测试。这个压缩包包含了三...

    SAP webservice测试方法

    除了基本的测试步骤外,为了更全面地验证SAP Webservice的功能,还可以采用以下几种高级测试技巧: - **断言测试**:利用SOAPUI提供的断言功能,对返回的数据进行验证,确保数据的准确性和完整性。 - **性能测试**...

    WebService 认证

    主要有以下几种认证方式: 1.4.1.1 Windows认证 - 集成Windows认证:通过配置IIS(Internet Information Services)以启用集成Windows认证,用户凭据由操作系统管理,提供了一种简单且安全的身份验证方法。 - Web....

    domino中运用webservice

    WebService是一种基于开放标准(如WSDL、SOAP和UDDI)的互联网通信协议,允许不同平台和语言的应用程序之间交换数据。在Domino中集成WebService,可以极大地扩展其功能,使其能够与其他系统进行无缝交互。 标题...

    js调用webservice示例+源码

    Web Service是一种基于网络的、平台无关的服务,它通过SOAP(Simple Object Access Protocol)协议,使用XML格式来交换数据。SOAP允许应用程序在HTTP或其他传输协议上进行通信,使得不同系统间的数据交换变得简单且...

    webservice

    Web服务(WebService)是一种基于开放标准的互联网通信协议,它允许不同的应用程序在不同的网络平台上进行交互。在Java中,开发Web服务通常涉及到SOAP(Simple Object Access Protocol)和WSDL(Web Services ...

    短信验证码Webservice调用

    短信验证码Webservice调用是现代Web应用中常见的一种安全验证机制,主要用于用户注册、登录、找回密码等场景,以防止恶意机器人或者自动化程序的操作。在本案例中,我们将探讨如何利用Webservice接口来实现短信...

    java axis 调用webservice服务端

    Axis是Apache软件基金会开发的一个开源项目,它提供了一种方便、高效的方式,使得Java应用程序能够作为客户端来消费或作为服务端来发布WebService。在这个过程中,Axis起到了一个SOAP(Simple Object Access ...

    pb开发webservice的经验

    Webservice则是一种基于Web的、松散耦合的服务交互方式,它使用XML作为数据交换格式,使得不同系统之间可以进行数据交换和业务协作。将PB与Webservice结合,可以让PB应用程序利用Web服务来扩展其功能和访问远程数据...

    webservice接口测试代码

    Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同系统之间进行数据交换。在本场景中,"webservice接口测试代码"指的是利用编程语言编写代码来验证WebService接口的功能是否正常运行。测试是...

    webservice简单测试工具接口测试

    Web服务(WebService)是一种基于互联网的、平台独立的软件接口,它允许不同系统之间的应用程序进行交互。WebService使用标准的XML(可扩展标记语言)来封装数据,并通过HTTP(超文本传输协议)进行通信,实现了跨...

    WebServiceStudio

    【标签】"WebService"是本次讨论的核心,它涵盖了以下几个关键知识点: 1. **SOAP(Simple Object Access Protocol)**:SOAP是一种基于XML的协议,用于在Web上交换结构化和类型化的信息。SOAP消息通常封装在HTTP...

    WSDl生成WebService接口及调用

    Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的系统之间进行数据交换。WSDL(Web Services Description Language)是XML格式的规范,用于定义Web服务及其操作、消息格式、通信协议等,...

    AJAX和WebService实现邮箱验证(无刷新验证邮件地址是否合法)

    根据提供的文件内容,WebService返回的验证结果可能有以下几种: - `result == 0`:用户需要重新验证。 - `result == 1`:邮件地址合法。 - `result == 2`:仅域名正确。 - `result == 3`:出现未知错误。 - `...

    腾讯地图WebService地址解析接口

    腾讯地图WebService地址解析接口是一种基于Web服务的技术,用于将地理坐标(经纬度)转换为具体的行政区域地址。这种接口在处理地理位置数据时非常有用,尤其是在分析用户行为、位置跟踪或提供定位服务的场景中。...

Global site tag (gtag.js) - Google Analytics