Web服务客户端需要向密码安全头添加类型属性



我正在编写一个。net客户端(WCF),它将使用使用Apache CXF (Java)实现的web服务,令人惊讶的是,让WCF将Password标签的Type属性设置为PasswordText非常困难。例如,我希望SOAP头看起来像这样:

  <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
     <wsse:UsernameToken wsu:Id="UsernameToken-11" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>test</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">a287645857cfaaddf82e2d333651b3e0</wsse:Password>
        <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">oKGlwEkbkhYJH6upsbiqeQ==</wsse:Nonce>
        <wsu:Created>2011-10-25T13:10:11.958Z</wsu:Created>
     </wsse:UsernameToken>
  </wsse:Security>

,但实际的头看起来像:

  <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
     <o:UsernameToken u:Id="uuid-5acb0b47-1b52-4535-bfaf-b9e76621b7eb-1">
        <o:Username>test</o:Username>
        <o:Password>a287645857cfaaddf82e2d333651b3e0</o:Password>
     </o:UsernameToken>
  </o:Security>

可以看到Password标记中缺少Type属性。网络上的一些研究似乎表明,我可能必须编写一个拦截器来解决这个问题。我认为有一个简单的解决方案,即配置设置,来解决这个问题,但也许没有。无论如何,我希望通过张贴这个问题得到一些澄清。

由于缺少Type属性,WS服务器拒绝请求。某些检查BSP规范遵从性的函数(不确定这是什么)抛出异常。

问候,Ola

好的,实现需要使用WSE 2.0 SP3。小心不要使用WSE 3.0.

WCF不能帮助你。

你所需要的都在这里。

相关内容

  • 没有找到相关文章

最新更新