【问题标题】:Web service client needs to add type attribute to password security headerWeb 服务客户端需要在密码安全头中添加类型属性
【发布时间】:2011-12-15 01:31:55
【问题描述】:

我正在编写一个 .NET 客户端 (WCF),它将使用使用 Apache CXF (Java) 实现的 Web 服务,令人惊讶的是,让 WCF 设置 Type 属性非常困难Password 标记到 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 属性。网络上的一些研究似乎表明我可能必须编写一个拦截器来解决这个问题。我认为有一个简单的解决方案,即配置设置,可以解决这个问题,但也许没有。无论如何,我希望通过发布这个问题得到一些澄清。

WS 服务器拒绝请求,因为缺少 Type 属性。 BSP 规范的一些功能检查。合规性(不确定这是什么)引发异常。

问候,奥拉

【问题讨论】:

  • 您是如何创建客户端的? “添加服务参考”
  • 您还需要 Nonce 和 Created 吗? WCF 用户名令牌配置文件实现不提供它们,因此它会导致自定义令牌或自定义消息头。
  • 是的,使用“添加服务引用”创建,然后对配置文件进行了一些调整。

标签: wcf soap ws-security usernametoken


【解决方案1】:

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

WCF 帮不了你。

您只需要here

This 是一个更好的示例。

【讨论】:

  • -1:你到底为什么要推荐这种过时的软件。
  • 你的反对票是荒谬的。您并没有说它不正确,只是说它是一个旧软件 - 是的,因为 OASIS 2004 已过时,因此您必须使用过时的工具才能使用它。并且 WSE 它是唯一支持它的。与其否决,不如提出其他建议。你对 OASIS 2004 一无所知,是吗?
  • 建议在生产环境中删除需要过时软件的应用程序。它必须是一个非常重要的应用程序才能要求在生产中使用过时的软件。
  • 它不是“旧的”,它已经过时且不受支持。
  • 再次确保没有人认为这是一个好主意。对于这个特定的人来说,这可能是一个必要的想法,但绝不是一个的想法。
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多