我们有一个安全的 WCF 服务,它带有 WsHttpBinding、客户端和服务器证书以及带有基于声明的授权的传输安全性。
50% 的时间一切正常。当我们向安全端点发出请求时,我们会得到正确的响应。但是,如果我们在第一次之后立即再次发送相同的请求,我们会得到以下响应:
The HTTP request was forbidden with client authentication scheme 'Anonymous'.
如果我们再次发送请求,我们会得到正常的行为。所以奇怪的请求有效,甚至无效。
但是在对问题进行了更多调查之后。我们注意到,如果前一个请求之间至少间隔 1:40 分钟,我们不会收到错误响应。
我们可以从调试器和日志中确认。客户端将凭据发送到服务。如果我们有 Authentication 响应,我们不会输入 System.ServiceModel。在 IIS 跟踪日志中,我们得到了很好的请求:
Authentication: SSL/PCT
User from token: Domain\CertifacteUserName
这是一个错误的要求:
Authentication: NOT_AVAILABLE
User from token:
同样在 IIS 跟踪日志记录中。如果我们发送第二个请求,我们会看到两个请求上的 ConnId 和 RawConnId 相同。如果我们发出多个成功的请求(通过在请求之间留出一些时间),它们对于每个请求都是不同的。
在我看来,IIS 没有收到我们发送的凭据,当它们在那里时。这是由于缓存吗?或者是其他东西?有没有人有解决方案。