处理web服务中的不对称标头

本文关键字:不对称 web 服务 处理 | 更新日期: 2023-09-27 18:29:35

晚上好,

我正在将一些遗留的.NET 2代码迁移到.NET 4。在这个项目的一个小角落里,有一个对第三方运行的SOAPWeb服务的WSE调用。该服务很奇怪——它使用UserToken身份验证,这很好,但它的这种方式似乎不能很好地与WCF配合使用。

我的第一种方法是将绑定配置为使用TransportWithMessageCredential,并通过<clientName>.ClientCredentials.UserName设置用户名/密码。在运行时,这引发了一个异常,表明响应中缺少安全性。在与Fiddler进行了一些调查后,我发现在发送UserToken标头时,来自服务的响应中没有安全标头。WCF认为格式化无效,并引发异常。

作为一个实验,我将绑定切换为使用Transport安全性,并在端点配置中添加了<headers>...</headers>块,本质上是对凭据进行硬编码。由于WCF没有尝试验证消息凭据,因此此操作成功,WCF感到满意。

我已经有了一个可以工作的原型,但从设计的角度来看,我真的很不满意,但我不知道该怎么想出更好的解决方案。

有没有办法(1)配置服务,使其发送UserToken,但在返回时不需要安全块,或者(2)在代码中注入SOAP标头,使其比放入配置中更具动态性?

谢谢!

处理web服务中的不对称标头

首先使用WCF BindingBox将基本http绑定转换为自定义绑定。然后在自定义绑定的安全元素上添加以下内容:

enableUnsecuredResponse="true"