我正在连接到一个java Web服务,该服务在其响应中使用了一个额外的密钥。我的客户端是用vb.net编写的(VS 2010,.net 4.0)。此密钥使用我的公钥加密,用于加密响应消息。因此,当我将我的客户端请求发送到此服务时,我在响应中收到以下错误:“传入的消息是使用与用于加密正文的令牌不同的签名进行签名。这是不期望的。”为了解决此错误,我创建了一个自定义消息编码器来拦截响应消息,获取密钥并使用我的私钥对其进行解密,然后使用该密钥解密响应消息。我已经成功解密了该消息,并使用解密的消息修改了响应消息,并将该消息返回给自定义消息编码器ReadMessage方法,在该方法中,它创建了返回给WCF进行处理的消息。但是,即使使用该解密的返回消息,我仍然会得到相同的错误:“传入的消息是使用与用于加密正文的令牌不同的令牌签名的。这是不可预期的。”即使在我手动完成后,WCF仍然试图解密该消息。我花了很多时间来解决这个问题,并试图确定如何绕过默认的WCF解密过程并让它使用我的自定义解密消息。任何帮助将不胜感激。
答案 0 :(得分:0)
如果您在自定义编码器中使用了一个ReadMessage重载,例如
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
并以预期的格式返回解密的消息,例如,您使用
重新创建它 return Message.CreateMessage(MessageVersion.Soap11, String.Empty, XElement.Parse(plainTextData));
你应该将AsymmetricSecurityBindingElement.EnableUnsecuredResponse
设置为true,它完全用于允许加密的请求和解密(plaint text)响应,重要的是返回的响应中没有安全头(这是新响应的方式)在上面的代码示例中创建。)