Java Web服务: WS-Security的细粒度操纵[Java编程]
本文“Java Web服务: WS-Security的细粒度操纵[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在简单 Web 服务环境中,客户机直接衔接到服务器,而服务器直接对恳求履行全部必须的处理.正如本系列 上一篇文章 所述,利用 SSL 供应保护的衔接可认为这类环境中的大部份利用供应超卓的安全性.但是,越发复杂的环境变得越来越广泛,此中触及到利用多层服务器处理恳求.在很多企业环境中日益风行的服务编排的完好理念就是以这种办法为底子的,这与面向服务架构(SOA)的概念相同.在这些范例的环境中,必须实现更强盛的 WS-Security 替换筹划.
正如上一期文章所述,WS-Security 带来了沉重的性能代价.降低本钱的办法之一就是针对由服务定义的各个操作乃至是消息设置符合的 WS-SecurityPolicy,而不是将单个 WS-Security 战略利用到整个服务.WS-Security 的细粒度利用要求考虑更多的内容,而不是利用一成不变的办法,但是假如得到精确利用的话,那么便可以削减常用操作的性能开销,同时不会削弱需求 WS-Security 的操作的安全性.
定义战略
本文利用的样例战略与 “Axis2 WS-Security 底子” 和 “Axis2 WS-Security 签名和加密” 中的战略相同 — 一个简单的库管理服务.这个服务定义了三种操作:
getBook,检索由 International Standard Book Number (ISBN) 标识的特定图书的细节.
getBooksByType,检索某一范例的全部图书的细节.
addBook,向库中增添一本新书.
为了向安全用例中增添一些风趣的改变,本文作出以下假定:
getBook 操作可以安全地公开给任何人(未利用安全性).
getBooksByType 需求受权(因此要利用 UsernameToken).
addBook 操作需求一个审计跟踪,以跟踪是谁增添了图书(通过对恳求消息举行签名实现).
在早期文章中,您已经理解了若何配置 Axis2/Rampart:将一个 WS-SecurityPolicy 文档衔接到 org.apache.axis2.client.ServiceClient 实例(在客户机端),大概将战略文档嵌入到 services.xml 服务配置(在服务器端).这个办法可以见效,并且可用于测试,但是关于生产利用来说,最好通过将 WS-SecurityPolicy 内嵌到 WSDL 文档将其直接关联到服务定义.WS-Policy 和 WS-SecurityPolicy 旨在为这种嵌入供应支持,并且利用来自 <wsdl:binding>、<wsdl:binding>/<wsdl:operation> 或 <wsdl:binding>/<wsdl:operation>/<wsdl:message> 定义的引用标识将被利用到绑定、操作或消息的呼应战略.Axis2 1.4.1 实现对内嵌在 WSDL 中的战略的初始处理,而这个实目前当前的 Axis2 1.5 发行版代码中得到了改良.为了演示战略在 WSDL 中的利用,本文结合利用了 Axis2 1.5 发行版代码和还没有发行的最新 Rampart 代码(后者终究会作为 Rampart 1.5 公布).
清单 1 展示了示例利用程序的 WSDL,此中增添了战略,并在呼应的位置中引用.(清单 1 针对长度和宽度举行了编辑;完好的 WSDL 可以从 代码下载 中的 library.wsdl 文件得到).每个战略定义了一个 Id 值,该值随后从呼应的操作(针对 UsernameToken 战略)或消息(针对签名战略)中引用,以粗体显示全部战略.
清单 1. 具有细粒度安全战略的 WSDL<wsdl:definitions targetNamespace="http://ws.sosnoski.com/library/wsdl"
xmlns:wns="http://ws.sosnoski.com/library/wsdl"
xmlns:tns="http://ws.sosnoski.com/library/types"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">
<!-- Policy for signing message, with certificate from client included in each
message to server -->
<wsp:Policy wsu:Id="SignOnly" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:AsymmetricBinding
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:InitiatorToken>
<wsp:Policy>
<sp:X509Token sp:IncludeToken=".../IncludeToken/AlwaysToRecipient"/>
</wsp:Policy>
</sp:InitiatorToken>
...
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:SignedParts
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<sp:Body/>
</sp:SignedParts>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
<!-- Policy for UsernameToken with plaintext password, sent from client to
server only -->
<wsp:Policy wsu:Id="UsernameToken" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SupportingTokens
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken=".../IncludeToken/AlwaysToRecipient"/>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
...
<wsdl:binding name="LibrarySoapBinding" type="wns:Library">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getBook">
<wsdlsoap:operation soapAction="urn:getBook"/>
<wsdl:input name="getBookRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getBookResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getBooksByType">
<wsp:PolicyReference
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
URI="#UsernameToken"/>
<wsdlsoap:operation soapAction="urn:getBooksByType"/>
<wsdl:input name="getBooksByTypeRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getBooksByTypeResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="addBook">
<wsdlsoap:operation soapAction="urn:addBook"/>
<wsdl:input name="addBookRequest">
<wsp:PolicyReference
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
URI="#SignOnly"/>
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addBookResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="library-granular">
...
</wsdl:service>
</wsdl:definitions>
清单 1 中的战略和 WSDL 均来自早期文章,不过没有按照本文的方法事前归并.但是,您会发现战略中有一处明显的差别:早期的版本都包含了 Rampart 配置信息,这些信息特定于客户机或服务器.目前战略被嵌入到 WSDL 中,因此不合适直接包含 Rampart 配置.(您需求编辑 WSDL 以包含客户机 Rampart 配置信息,并在每次发生更改时重新生成代码,而在服务器端,Rampart 配置将被公开给拜候 WSDL 的任何人).因此示例代码将单独设置配置信息.为此,对包含的 Rampart 配置利用了之前用于战略的相同本领的差别变体.
以上是“Java Web服务: WS-Security的细粒度操纵[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |