WCF Java 客户端和 IncludeTimestamp
Posted
技术标签:
【中文标题】WCF Java 客户端和 IncludeTimestamp【英文标题】:WCF Java clients and IncludeTimestamp 【发布时间】:2012-12-08 06:02:06 【问题描述】:所以最近我们向 Java 客户端公开了一项服务。我们的服务利用传输安全以及用户名/密码验证。
在尝试调用我们的服务时,客户端收到关于安全标头的异常。进一步的研究表明,WCF 期望时间戳包含在从客户端传递的 SOAP 标头中。如果这不存在(或方差大于 5 分钟),它将引发异常。
我们还发现 Java 客户端没有通过 WCF 预期的时间戳。我们发现的唯一解决方法是实现 CustomBinding 并将 IncludeTimestamp 设置为 false。这允许客户端成功调用服务。
今天在查找 WCF 安全性最佳实践时,我在 MSDN 上看到以下内容:
在自定义绑定上将 SecurityBindingElement.IncludeTimestamp 设置为 True
创建自定义绑定时,必须将 IncludeTimestamp 设置为 真的。否则,如果 IncludeTimestamp 设置为 false,则客户端 正在使用基于非对称密钥的令牌,例如 X509 证书, 邮件不会被签名。
所以,我的问题是,在将 SSL(传输)用于非 .NET 客户端的同时将 WCF(以及最终的 Web API)服务暴露给外界时,最佳做法是什么???
【问题讨论】:
不同服务工具包之间有很多差异,我不确定最佳实践是什么。我发现消息中带有用户名或带有基本身份验证的 HTTPS 与大多数工具包兼容。即便如此,就像您发现的那样,WCF 在限制性更强的方面犯了错误,而 Java 工具包则更加宽松。 WCF 不断向自定义绑定添加更多标志来解决这些问题。 【参考方案1】:最佳实践只有在可以强制执行时才有效。如果您无法控制客户端,并且他们无法发送时间戳,请务必将 includetimestamp 设置为 false。
【讨论】:
以上是关于WCF Java 客户端和 IncludeTimestamp的主要内容,如果未能解决你的问题,请参考以下文章
Java Web 服务的 .NET 客户端 WCF 代理类中的类定义重复
使用连接到 WCF 服务的 Java 客户端在 XML 正文中嵌入 XML 指令