现在的位置: 首页 > 综合 > 正文

Web Service 安全扩展(SecurityExtension )

2012年08月23日 ⁄ 综合 ⁄ 共 3000字 ⁄ 字号 评论关闭

·   问题

关于 web service 就不用多说了。以下说明我们在使用web service经常碰到的问题:

1、web service接口的安全性:web service的接口是直接暴露在web(虽然可以通过一些方式来验证访问者的身份,但实现起来都比较麻烦,或者性能不佳),另如何防止重放攻击也是个问题;
2、web service数据在web上传输是使用明文的方式,数据容易被非法拦截或篡改;
3、web service需要传输较多的数据时的性能需要如何优化。

·  解决

使用 soap extension来解决以上的问题:

1、在soap头加入身份认证信息(称为Passport),Passport身份的一个凭证,在客户端和服务器端都有保存,验证时必须相匹配。passport在soap头是个报文数据,包含执行身份验证需要的信息。passport使用事务标识来防止重放攻击,即有服务端发出事务标识供客户端使用,客户端发出请求时必须包含该事务标识,当服务端响应后,服务端注销原来的事务标识并生成新的事务标识;
2、数据保护,使用数据摘要或对数据进行加密;
3、数据压缩,在数据传输前对数据进行压缩。

·   、概述

本组件在实现上是通过使用Soap扩展(Passport协议)和SecurityExtension协议来实现对Web Service 的扩展。组件提供3个功能:

1、身份认证

     身份认证由Passport协议实现的。登陆、登出以及结束异步事务是通过专门的Passport服务接口(WebService)发送 Passport包实现的。服务请求是通过加入自定义的Soap头(包含有Passport包)来实现的。

     客户端要请求WebService 服务必须先在本地创建执照,并发出登陆请求时,服务端接受到登陆请求,注册客户执照,并把更改后的执照返回给客户段。在以后的服务请求中,根据Passport协议个规定,客户端和服务端不断修改执照信息来完成身份的验证。

     身份认证中在服务器端保存的执照信息采用缓存的方式,当超过一定时间将被注销。

1.1、简单执照验证

     简单执照密码验证包括登陆、请求、登出三个部分。

     登陆在实现上是向服务器专门的Passport访问通道(WebService)发送加密过身份认证的信息(包括用户名、密码、登记号)。服务器解析身份认证信息,并验证用户名和密码(这个验证过程实施者必须重写),当用户名和密码验证通过后,服务端根据登记号在服务器注册其登记号,如果该登记号已经存在,这登陆失败。注册完登记号,服务器将产生一个执照(Guid同登记号),加密后返回给登陆请求者,这时完成登陆。之后客户端发出的请求必须包含此执照,直至登出。

     服务请求过程中,客户端发出的服务请求中包含服务器授予的执照,服务器接收到请求后,首先验证此执照的正确性。通过验证后,执行请求的内容,返回给客户端。

     登出时,服务器将注销授予给客户端的执照,客户端如果还要服务请求必须先登陆。

1.2、事务执照验证

事务执照验证包括登陆、服务请求、登出三个部分。

登陆请求和简单执照验证一样。不同的是服务器注册登记号后,产生一个执照,该执照包含一个事务登记号,事务登记号只能使用一次(同步的状态下)。服务器把执照返回给客户端完成登陆。

服务请求的过程分为2种类型:一种是同步的方式,即客户端发出一个请求后,在接受到服务器响应后再发下一个请求;另一种是异步的方式,即客户端同时向服务器发出多个请求。

同步的方式中,当客户端发出服务请求中包含服务器授予的执照,如果请求中的事务ID尚未被注册,服务器则拒绝服务。事务ID验证通过后,服务器更新事务ID并销毁原事务ID。接着执行请求内容,完成客户端的请求,并发送更新后的执照给客户端。

         异步的方式中,客户端在服务器授予的执照加入异步标识号(称异步ID),发送给服务器,服务端接收到这样的执照后,先执行事务验证。事务验证通过后,验证此事务的异步 ID是否已经被注册,如果已经被注册,则拒绝服务。异步验证通过后,服务端注册异步ID,执行请求内容后把执照在发回给客户端。注意,执照并没有发生改变,同一批异步请求共用一个事务ID。当客户端确认要结束本次的异步请求时(客户端必须确保所有的线程的请求已经结束),发送结束异步请求信息(包括事务ID和结束标志)。服务端将注销该异步请求的所有信息,并生成新的事务ID和更新执照。

         登出时,客户端发送登出请求。服务端将注销所有本次登陆在服务端注册的信息,完成登出。

2、数据保护

通过数据摘要的方式来验证数据的完整性,同时也可以使用数据加密的方式防止重要的数据被非法截获。

3、数据压缩

webservice的请求和响应的数据进行压缩,默认使用rfc1951描述的进行压缩。实施者可以重写压缩方式。

·  细节

1、Passport

Passport为客户端进行web service 请求和确认服务响应的一种证书。Passport往返于客户端和服务器之间(通过PassportInfo),而且双方在本地都通过管理器保存有Passport的副本。Passport的生成是服务器根据客户端发出登记号产生的,简单执照验证中,Passport一经生成就不在修改,客户端可以重复使用直到登出。而事务执照验证中,Passport中的事务ID将不断改变,这个改变是由服务器发起的,当服务器接受到Passport,验证通过后(登记号和事务ID)将生成新的事务ID并销毁原来的事务ID。对于异步多个请求的方式,服务器将认为是同一个事务,而使用异步ID加以注册。

执照信息(PassportInfo)是保存在Passport服务接口的参数或者命名为PassportSoap头里,内容是Passport协议报文数据经过加密和Base64编码过的数据。报文内容如下:

Passport协议

报文:

报文标记开头(PS

D

保留

验证类型

请求类型

PassportID16字节)

Username16字节)(可选)

Password16字节)(可选)

TransactionID16字节)(可选)

LastTransactionID16字节)(可选)

AsynchronismID16字节)(可选)

报文标记开头:16位,固定为PS

D1位,报文发送者(0客户端/1服务端)

保留:7

验证类型:4

0x0:无验证

0x1:简单执照验证

0x2:事务执照验证

请求类型:4

请求类型

说明

验证类型

D0

D1

0x1

登陆请求

0x1

UsernamePassword必须

 

0x2

TransactionID

0x2

服务请求

0x1

 

 

0x2

TransactionID 必须

TransactionIDLastTransactionID 必须

0x4

异步服务请求

0x2

TransactionIDAsynchronismID必须

TransactionIDAsynchronismID必须

0x5

结束异步服务请求

0x2

TransactionID

TransactionIDLastTransactionID 必须

0xf

登出请求

0x1

 

 

0x2

 

 

PassportInfo先由客户端发出,服务器接收后,进行响应和修改,返回给客户端,客户端对接收到的 PassportInfo 进行验证(PassportID

抱歉!评论已关闭.