2

我们必须连接到第三方 SOAP 服务,并且我们正在使用 WCF 来执行此操作。该服务是使用 Apache AXIS 开发的,我们无法控制它,也无法改变它的工作方式。我们看到的问题是它希望使用 Web 服务安全性对请求进行格式化,因此我们正在执行所有正确的签名等操作。然而,来自第 3 方的响应是不安全的。如果我们嗅探电线,我们会看到响应正常(尽管没有任何时间戳、签名等)。底层 .NET 组件将此视为错误,因为它认为这是一个安全问题,因此我们实际上并没有收到这样的肥皂响应。有什么方法可以配置 WCF 框架以发送安全请求,但不要期望响应中的安全字段?查看 OASIS 规范,它没有

有关信息,这是我们看到的异常:

我们收到的例外是:

System.ServiceModel.Security.MessageSecurityException was caught
  Message="Security processor was unable to find a security header in the message. This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.   This can occur if the service is configured for security and the client is not using security."
  Source="mscorlib"
  StackTrace:
    Server stack trace:
       at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessageCore(Message& message, TimeSpan timeout)
       at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout)
       at System.ServiceModel.Security.SecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates)
       at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)
       at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
       at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)

顺便说一句,我看到很多帖子都说如果你不考虑时间戳,那么安全字段就不会出现。这不是一个选项 - 我们正在与之通信的服务要求时间戳。

4

3 回答 3

3

Microsoft 现在有此功能的修补程序。

http://support.microsoft.com/kb/971493

于 2009-07-09T18:10:32.130 回答
2

有趣的是你应该问这个问题。大约一年前,我问微软如何做到这一点。当时,使用 .NET 3.0 是不可能的。不确定这在 3.5 世界中是否发生了变化。但是,不,没有物理方法可以为请求增加安全性并使响应为空。

在我以前的雇主中,我们使用了一个模型,该模型需要在请求中使用证书的 WS-Security 标头,但响应是不安全的。

您可以使用 ASMX Web 服务和 WSE 执行此操作,但不能使用 WCF v3.0。

于 2008-09-15T14:57:20.683 回答
2

您很有可能无法单独使用配置。我必须与 Axxis 进行一些集成工作(我们的目标是 WSE3——WCF 的祖先),并且我必须编写一些代码并将其粘贴到 WSE3 的管道中,以便在将 Axxis 的响应传递给 WSE3 之前对其进行处理。好消息是,将这些处理程序添加到管道非常简单,一旦进入处理程序,您就可以获得一个 SoapMessage 的实例,并且可以使用它做任何您想做的事情(例如删除时间戳)

于 2008-09-15T14:57:55.143 回答