从WCF创建的ws-security标头中删除timestamp元素
我正在使用来自WCF的旧Java Web服务,该服务需要以下forms的请求:
username password ...
使用以下配置hack“工作”但我不希望在config中公开用户名和密码:
... username password
我想要使用的是以下内容:
但是这会在安全元素中生成timestamp
元素,java webservice将其置于其中。
我需要做的是从它生成的XML中删除时间戳,或者为我做一些自定义绑定。
我尝试创建自定义凭据,但这只更改了usernameToken
元素。
我已经看过许多很多SO问题(许多来自2007年及之前的问题),其中包括以下内容并没有任何乐趣:
- 从安全性中删除Timestamp元素
- 如何使WCF客户端符合特定的WS-Security
删除timestamp元素的最佳,最简单和最优雅的方法是什么。
提前致谢
在Kristian Kristensen的博客文章中找到了关于他在集成到Java AXIS 1.X和WSS4J Web服务方面的困境的答案。 。 比我之前尝试的黑客更简单,更容易。
您可以使用App.config中的简单自定义绑定解决此问题,如下所示:
BUGFIX – 以前的版本中有一个错误 – 忘了在httpTransport中添加证书
这提供了正确的SOAP ws-security标头,没有时间戳,只是通过调用此代码使Java服务器混乱
var client = new [clientType](); client.ClientCredentials.ClientCertificate.Certificate = [certificate]; client.ClientCredentials.UserName.UserName = [UserName]; client.ClientCredentials.UserName.Password = [Password]; System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; // TODO wrap in try catch client.Open(); var result = client.[action](new [RequestType] { ... });
进一步阅读:
- 要回答的链接来源 – Kjell-SverreJerijærvi的博客
- 在哪里我找到了实际的答案 – 克里斯蒂安克里斯滕森的博客