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认证请参见下面的说明
分享到:
相关推荐
首先,Web服务是一种通过互联网提供应用程序功能的方式,它使用开放标准(如XML、SOAP和WSDL)来实现不同系统之间的通信。XML(可扩展标记语言)用于数据表示,SOAP(简单对象访问协议)是传输这些数据的协议,而...
创建Axis2 Web服务的POJO方式主要包括以下几个步骤: 1. **定义服务接口和服务实现**:首先,你需要创建一个Java接口,定义你的服务方法。接着,编写一个实现了这个接口的Java类,作为服务的具体实现。 2. **添加...
WebService是一种跨平台、跨语言的通信标准,它允许不同系统间的应用程序通过网络交换数据,因此在系统更新场景下,WebService可以作为服务器端向客户端分发更新内容的桥梁。 首先,我们要理解WebService的基本原理...
本篇文章将详细讲解如何在C++中调用WebService,包括静态和动态方式,并探讨相关的源码实现。 首先,让我们理解什么是WebService。WebService是一种基于XML的开放标准,允许不同平台和应用程序之间进行互操作。它...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的系统之间进行数据交换和功能调用。在本项目中,通过运行名为"webservicTest"的主程序,我们可以对WebService进行测试。这个压缩包包含了三...
除了基本的测试步骤外,为了更全面地验证SAP Webservice的功能,还可以采用以下几种高级测试技巧: - **断言测试**:利用SOAPUI提供的断言功能,对返回的数据进行验证,确保数据的准确性和完整性。 - **性能测试**...
主要有以下几种认证方式: 1.4.1.1 Windows认证 - 集成Windows认证:通过配置IIS(Internet Information Services)以启用集成Windows认证,用户凭据由操作系统管理,提供了一种简单且安全的身份验证方法。 - Web....
WebService是一种基于开放标准(如WSDL、SOAP和UDDI)的互联网通信协议,允许不同平台和语言的应用程序之间交换数据。在Domino中集成WebService,可以极大地扩展其功能,使其能够与其他系统进行无缝交互。 标题...
Web Service是一种基于网络的、平台无关的服务,它通过SOAP(Simple Object Access Protocol)协议,使用XML格式来交换数据。SOAP允许应用程序在HTTP或其他传输协议上进行通信,使得不同系统间的数据交换变得简单且...
Web服务(WebService)是一种基于开放标准的互联网通信协议,它允许不同的应用程序在不同的网络平台上进行交互。在Java中,开发Web服务通常涉及到SOAP(Simple Object Access Protocol)和WSDL(Web Services ...
短信验证码Webservice调用是现代Web应用中常见的一种安全验证机制,主要用于用户注册、登录、找回密码等场景,以防止恶意机器人或者自动化程序的操作。在本案例中,我们将探讨如何利用Webservice接口来实现短信...
Axis是Apache软件基金会开发的一个开源项目,它提供了一种方便、高效的方式,使得Java应用程序能够作为客户端来消费或作为服务端来发布WebService。在这个过程中,Axis起到了一个SOAP(Simple Object Access ...
Webservice则是一种基于Web的、松散耦合的服务交互方式,它使用XML作为数据交换格式,使得不同系统之间可以进行数据交换和业务协作。将PB与Webservice结合,可以让PB应用程序利用Web服务来扩展其功能和访问远程数据...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同系统之间进行数据交换。在本场景中,"webservice接口测试代码"指的是利用编程语言编写代码来验证WebService接口的功能是否正常运行。测试是...
Web服务(WebService)是一种基于互联网的、平台独立的软件接口,它允许不同系统之间的应用程序进行交互。WebService使用标准的XML(可扩展标记语言)来封装数据,并通过HTTP(超文本传输协议)进行通信,实现了跨...
【标签】"WebService"是本次讨论的核心,它涵盖了以下几个关键知识点: 1. **SOAP(Simple Object Access Protocol)**:SOAP是一种基于XML的协议,用于在Web上交换结构化和类型化的信息。SOAP消息通常封装在HTTP...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的系统之间进行数据交换。WSDL(Web Services Description Language)是XML格式的规范,用于定义Web服务及其操作、消息格式、通信协议等,...
根据提供的文件内容,WebService返回的验证结果可能有以下几种: - `result == 0`:用户需要重新验证。 - `result == 1`:邮件地址合法。 - `result == 2`:仅域名正确。 - `result == 3`:出现未知错误。 - `...
腾讯地图WebService地址解析接口是一种基于Web服务的技术,用于将地理坐标(经纬度)转换为具体的行政区域地址。这种接口在处理地理位置数据时非常有用,尤其是在分析用户行为、位置跟踪或提供定位服务的场景中。...