首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Metro的Ws-Security标头

使用Metro的Ws-Security标头
EN

Stack Overflow用户
提问于 2010-03-29 14:51:38
回答 2查看 5.5K关注 0票数 2

我有一个web服务,它实现了WS-Security,但没有在WSDL中定义策略。我能够使用Axis2作为客户端成功地使用这个web服务。

我正在尝试使用Metro 2使用相同的web服务,但wsse:security头不起作用。只有当服务定义了不受我控制的安全策略时,它才能起作用。我通过创建一个示例web服务对此进行了测试,除非我定义了策略,否则我的metro客户端永远不会发送wsse:security头。

在使用Metro时,我是否遗漏了什么?

我创建了wsdl的本地副本,并在其中定义了策略。我使用此wsdl创建了web服务客户端,但安全头仍然不起作用。wsit client.xml文件看起来不错。我甚至将所有的配置与work服务的客户端进行了比较,它定义了策略,配置是相同的,但仍然不起作用。到目前为止,我的结论是metro客户端需要实际的web服务来定义策略。

wsit client.xml的内容

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?> 
<definitions 
xmlns="http://schemas.xmlsoap.org/wsdl/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="mainclientconfig"
>
<import location="NewWebService.xml" namespace="http://test.com/"/>

NewWebService.xml与wsit client.xml一起位于其中,并包含以下策略信息

代码语言:javascript
复制
<wsp:Policy wsu:Id="NewWebServicePortBindingPolicy">
        <wsp:ExactlyOne>
            <wsp:All>
                <sc:CallbackHandlerConfiguration wspp:visibility="private">
                    <sc:CallbackHandler default="dsfsd" name="usernameHandler"/>
                    <sc:CallbackHandler default="sdfsdfds" name="passwordHandler"/>
                </sc:CallbackHandlerConfiguration>
            </wsp:All>
        </wsp:ExactlyOne>
    </wsp:Policy>

它在绑定中引用,如下所示-

代码语言:javascript
复制
<binding name="NewWebServicePortBinding" type="tns:NewWebService">
    <wsp:PolicyReference URI="#NewWebServicePortBindingPolicy"/>

更改后的wsdl包含此策略-

代码语言:javascript
复制
<wsp:Policy xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" wsu:Id="NewWebServicePortBindingPolicy"> 
    <sp:SignedEncryptedSupportingTokens> 
        <wsp:Policy> 
            <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
                <wsp:Policy> 
                    <sp:WssUsernameToken10 /> 
                </wsp:Policy> 
            </sp:UsernameToken> 
        </wsp:Policy> 
    </sp:SignedEncryptedSupportingTokens> 
    <sp:TransportBinding> 
        <wsp:Policy> 
            <sp:AlgorithmSuite> 
                <wsp:Policy> 
                    <sp:Basic128 /> 
                </wsp:Policy> 
            </sp:AlgorithmSuite> 
            <sp:IncludeTimestamp /> 
            <sp:Layout> 
                <wsp:Policy> 
                    <sp:Lax /> 
                </wsp:Policy> 
            </sp:Layout> 
            <sp:TransportToken> 
                <wsp:Policy> 
                    <sp:HttpsToken RequireClientCertificate="false" /> 
                </wsp:Policy> 
            </sp:TransportToken> 
        </wsp:Policy> 
    </sp:TransportBinding> 
    <sp:Wss10 /> 
    <wsam:Addressing wsp:Optional="true" /> 
</wsp:Policy> 
EN

回答 2

Stack Overflow用户

发布于 2010-03-29 15:05:15

您需要将ws:Policy添加到WSDL的本地副本和wsit-client.xml中。This thread (尤其是this answer )可能会帮助您完成整个设置。

票数 0
EN

Stack Overflow用户

发布于 2010-03-30 01:16:25

试着看看我在这里写的一个非常类似的问题-- Calling a .NET web service (WSE 3.0, WS-Security) from JAXWS-RI。我还是(!)尝试解决它b/c我现在从服务器端收到一个错误,但我更新了这个问题的一些细节,关于我试图让它工作的过程。有一个链接指向我在Metro java.net论坛上发布的一篇文章,对我很有帮助。不过,我能够获得为我生成的wsse头文件。

简而言之,我认为应该在WSDL的本地副本中包含ws:Policy部分(并在创建服务时将该WSDL作为参数发送)。下面是我创建客户端对象的代码片段-在这里必须简单,因为我使用Spring工厂将客户端引用注入到另一个服务中,不管怎样,这是jist:

代码语言:javascript
复制
String wsdlDocumentLocation = "localVersion.wsdl";
QName serviceName = new QName("mynamespace", "myServiceName");
Service service = Service.create(wsdlDocumentLocation, serviceName);
//send the port the fully qualified name of the Metro generated
//client interface
Object port = service.getPort("my.client.package.ClientServiceInterface");

这和您的wsit client.xml应该可以一起工作。您将把wsit client.xml文件放在哪里?如果它在类路径上(我的在WEB-INF/classes中),您应该在控制台中看到一条日志语句,说明它正在被读取。下面是我在控制台中看到的消息:

WSIT13:12:06.779 WSIT :已从文件file:/C:/projects/target/my-webapp/WEB-INF/classes/wsit-client.xml.加载

配置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2536210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档