Java Web 服务: Metro 服务下的 WS-Security
2010-02-02 00:00:00 来源:WEB开发网在服务器端,WSIT 要求在 WEB-INF/sun-jaxws.xml 配置文件(在 “Metro 简介” 中介绍过)中指定的位置提供 WSDL。所提供的 WSDL 必须包含用于为 WSIT 配置用户信息的自定义扩展,但是这些自定义扩展在为响应对服务端点的 HTT PGET 请求而提供的 WSDL 版本中被删除掉了。
这些用于配置 WSIT 用户信息的自定义扩展在服务器端和客户端看起来一样,但是在用于扩展元素的 XML 名称空间中不同。在客户端,名称空间是 http://schemas.sun.com/2006/03/wss/client;在服务器端,名称空间是 http://schemas.sun.com/2006/03/wss/server。
Metro 中的 UsernameToken
“Axis2 WS-Security 基础” 使用了一个简单的 UsernameToken 例子来介绍 Axis2/Rampart 环境下的 WS-Security。UsernameToken 提供了一种通过 WS-Security 来表示 “用户名/密码” 对的标准方法。密码信息可以以纯文本方式(通常,这种方式只有在同时配置了传输层安全协议(Transport Layer Security,TLS)或者使用 WS-Security 加密时才会在生产中使用 — 但是这种方式确实便于测试)或者以散列值方式发送。
要在 Metro 上实现一个简单的纯文本格式的 UsernameToken 示例,您需要在 WSDL 服务定义中恰当定义 WS-Policy/WS-SecurityPolicy。清单 1 展示了 “Metro 简介” 中使用过的一个基础 WSDL 服务定义的修订版,包含了在从客户端到服务器的请求上要求 UsernameToken 的策略信息。与策略本身一样,<wsdl:binding> 中的策略引用以粗体显示。
清单 1. 纯文本 UsernameToken WSDL
<?xml version="1.0" encoding="UTF-8"?>
<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/">
<wsdl:types>
...
</wsdl:types>
<wsdl:message name="getBookRequest">
<wsdl:part element="wns:getBook" name="parameters"/>
</wsdl:message>
...
<wsdl:portType name="Library">
<wsdl:operation name="getBook">
<wsdl:input message="wns:getBookRequest" name="getBookRequest"/>
<wsdl:output message="wns:getBookResponse" name="getBookResponse"/>
</wsdl:operation>
...
</wsdl:portType>
<wsdl:binding name="LibrarySoapBinding" type="wns:Library">
<wsp:PolicyReference xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
URI="#UsernameToken"/>
<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:binding>
<wsdl:service name="MetroLibrary">
<wsdl:port binding="wns:LibrarySoapBinding" name="library">
<wsdlsoap:address location="http://localhost:8080/metro-library-username"/>
</wsdl:port>
</wsdl:service>
<!-- Policy for Username Token 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:definitions>
更多精彩
赞助商链接