11

所以最近我们向 Java 客户端公开了一项服务。我们的服务利用传输安全以及用户名/密码验证。

当尝试调用我们的服务时,客户端收到关于安全标头的异常。进一步的研究表明,WCF 期望时间戳包含在从客户端传递的 SOAP 标头中。如果这不存在(或方差大于 5 分钟),它将引发异常。

我们还发现 Java 客户端没有通过 WCF 预期的时间戳。我们发现的唯一解决方法是实现 CustomBinding 并将 IncludeTimestamp 设置为 false。这允许客户端成功调用服务。

今天在使用 WCF 查找安全性最佳实践时,我在 MSDN 上看到以下内容:

在自定义绑定上将 SecurityBindingElement.IncludeTimestamp 设置为 True

创建自定义绑定时,必须将 IncludeTimestamp 设置为 true。否则,如果 IncludeTimestamp 设置为 false,并且客户端正在使用基于非对称密钥的令牌(例如 X509 证书),则不会对消息进行签名。

所以,我的问题是,在将 SSL(传输)用于非 .NET 客户端的同时将 WCF(以及最终的 Web API)服务暴露给外界时,最佳实践是什么?

4

1 回答 1

1

最佳实践只有在可以实施时才有效。如果您无法控制客户端,并且他们无法发送时间戳,那么请务必将 includetimestamp 设置为 false。

于 2013-08-10T10:30:42.253 回答