gpt4 book ai didi

java - 使用 Metro 的 Ws-Security header

转载 作者:行者123 更新时间:2023-11-29 09:25:30 27 4
gpt4 key购买 nike

我有一个实现 WS-Security 但没有在 WSDL 中定义策略的 Web 服务。我能够使用 Axis 2 作为客户端成功使用此 Web 服务。

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

使用 Metro 有什么我遗漏的吗?

编辑-------------------------------------------- --------------------------------------------

我创建了 wsdl 的本地副本,并在其中定义了策略。我使用这个 wsdl 创建了 web 服务客户端,但安全 header 仍然没有。 wsit-client.xml 文件看起来不错。我什至将所有配置与定义策略的 web 服务的客户端进行了比较,配置相同但仍然不起作用。截至目前,我的结论是 Metro 客户端需要实际的 Web 服务定义策略。

编辑-------------------------------------------- ------------------------------------------

wsit-client.xml 的内容

<?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 一起位于并包含以下策略信息

<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>

在这样的绑定(bind)中引用 -

<binding name="NewWebServicePortBinding" type="tns:NewWebService">
<wsp:PolicyReference URI="#NewWebServicePortBindingPolicy"/>

更改后的 wsdl 包含此策略 -

<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>

最佳答案

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

关于java - 使用 Metro 的 Ws-Security header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2536210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com