最近我们将服务暴露给Java客户端。我们的服务利用传输安全性以及用户名/密码验证。
尝试调用我们的服务时,客户端收到有关安全标头的异常。进一步的研究表明,WCF希望时间戳包含在从客户端传递的SOAP头中。如果不存在(或方差大于5分钟),则会抛出异常。
我们还发现Java客户端没有传递WCF所期望的时间戳。我们发现的唯一解决方法是实现CustomBinding并将IncludeTimestamp设置为false。这允许客户端成功调用该服务。
今天在使用WCF查找安全性的最佳做法时,我在MSDN上看到以下内容:
在自定义绑定上将SecurityBindingElement.IncludeTimestamp设置为True
创建自定义绑定时,必须将IncludeTimestamp设置为 真正。否则,如果IncludeTimestamp设置为false,则客户端 使用非对称的基于密钥的令牌,如X509证书, 邮件不会被签名。
所以,我的问题是在向非.NET客户端使用SSL(传输)时将WCF(以及最终的Web API)服务暴露给外部世界的最佳做法是什么?
答案 0 :(得分:1)
最佳做法仅在可以强制执行时有效。如果您无法控制客户端,并且无法发送时间戳,则无论如何都要将includetimestamp设置为false。