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 指令

带有 WCF 客户端的 Java JAX-WS 服务

如何使用 clientCredentialType="Basic" 将 Java 客户端连接到 WCF 服务

带有客户端证书身份验证的 Wcf 不适用于 soapui

.NET - 部署 WCF 客户端,没有 app.config