У меня есть веб-сервис, который реализует WS-Security, но не определяет политику в WSDL. Я могу успешно использовать этот веб-сервис, используя Axis 2 в качестве клиента.
Я пытаюсь использовать тот же веб-сервис, используя Metro 2, но заголовки wsse: security не работают. Это работает, только если служба определяет политику безопасности, которая не находится под моим контролем. Я проверил это, создав образец веб-службы, и, пока я не определил политику, мой клиент метро никогда не отправляет заголовки wsse: security.
Есть ли что-то, чего мне не хватает в Metro?
EDIT ---------------------------------------------- --------------------------------------------
Я создал локальную копию wsdl и определил политику. Я создал клиент веб-службы, используя этот wsdl, но заголовки безопасности все еще не работают. Файл wsit-client.xml выглядит нормально. Я даже сравнил все конфигурации с клиентом веб-службы, которая определяет политику, и конфигурации одинаковы, но все же это не работает. На данный момент я пришел к выводу, что клиенту Metro нужен фактический веб-сервис, определяющий политику.
EDIT ---------------------------------------------- ------------------------------------------
Содержимое 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>
который упоминается в привязке следующим образом -
<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>