WCF 错误 - 安全处理器无法在消息中找到安全标头

Posted

技术标签:

【中文标题】WCF 错误 - 安全处理器无法在消息中找到安全标头【英文标题】:WCF Error - Security processor was unable to find a security header in the message 【发布时间】:2011-03-02 03:06:56 【问题描述】:

我的 WCF 服务出现了一个安全错误。最初我的错误是关于一个错误的状态(使用环绕客户端代理清除此错误),但通过启用跟踪找到了更多信息。

遇到此错误后,我的解决方案无法运行,甚至我的备份副本现在也出现相同的错误。我不确定是什么导致了这种情况发生,我撤消了我所做的更改(与 WCF 无关),但仍然出现相同的错误。

来自跟踪的错误是 - System.ServiceModel.Security.MessageSecurityException:安全处理器无法在消息中找到安全标头。这可能是因为消息是不安全的错误,或者是因为通信双方之间存在绑定不匹配。如果服务配置了安全性并且客户端未使用安全性,则可能会发生这种情况。

我不确定我需要做什么来解决这个问题,任何帮助都会很有用。该应用程序以前可以运行。

【问题讨论】:

您可能会发现您的问题与此线程有关:***.com/questions/3004299/… 【参考方案1】:

如果您想避免配置自定义绑定,可以获取对当前 basicHttpBinding 的引用,从中创建自定义绑定,并包含 EnabledUnsecuredResponse 属性:

  //client is a reference to your gerenated proxy client class
  var elements = client.Endpoint.Binding.CreateBindingElements();
  elements.Find<SecurityBindingElement>().EnableUnsecuredResponse = true;
  client.Endpoint.Binding = new CustomBinding(elements);

【讨论】:

你是我的救星。我花了 4 个多小时的时间,但没有多少答案表明这个概念。 谢谢!这对我来说是完美的解决方案!【参考方案2】:

尽管绑定不匹配,但您可以通过设置来强制 WCF 工作

安全 enableUnsecuredResponse="true"

下面是更多代码示例,您可以使用它与您自己的设置进行比较...

<security enableUnsecuredResponse="true"
          authenticationMode="MutualCertificateDuplex"
          defaultAlgorithmSuite="TripleDesRsa15"
          includeTimestamp="false"
          messageSecurityVersion="Default" >
  <issuedTokenParameters defaultMessageSecurityVersion="Default">
    <issuer address="" binding="" bindingConfiguration="">
      <identity>
        <certificateReference storeLocation="CurrentUser"
                              x509FindType="FindBySerialNumber"
                              findValue="0b 8d a9 18 59 65 36 b9 de 65 8b 21 ba 6c ab cc"
                              isChainIncluded="true" />
      </identity>
    </issuer>
  </issuedTokenParameters>
</security>

【讨论】:

以上是关于WCF 错误 - 安全处理器无法在消息中找到安全标头的主要内容,如果未能解决你的问题,请参考以下文章

通过消息头的 WCF 安全性

WCF 身份验证 - 验证消息的安全性时出错

WCF 消息安全证书

带压缩的 WCF 消息安全性

WCF:无法为 SSL/TLS 安全通道建立信任关系,出现权限错误

具有消息安全性的 WCF 路由