1

我正在尝试在基于 http.sys 的服务器中实现单点登录(使用 IOCP),并且我遇到了 AcceptSecurityContext 的奇怪问题,它会随机失败并显示 SEC_E_LOGON_DENIED。

从同一台客户端机器连接到同一台服务器机器时(大约 50% 的时间),即使只有一个客户端只有一个 http 连接,我也会随机出现故障。两台机器都在同一个域中,它们都不是域控制器。

失败的调用是挑战-响应序列中的第二个(也是最后一个)调用,第一个总是成功的。

当我在 AcceptSecurityContext 调用之前在 IDE 中有一个断点时(没有其他任何更改),身份验证总是成功(据我测试)。

怀疑时间问题,我在通话前放置了一个 Sleep() ,但这并没有提高成功率。

此外,当从运行 http 服务器的同一台计算机连接时,身份验证始终成功。

无论客户端浏览器(IE 和 Chrome)如何,行为都是相同的。

有任何想法吗?

4

1 回答 1

1

发现并解决的问题,它与base64数据的解码问题有关,一个字符('+')被错误地转换为空格'',因此该问题仅在该字符存在时发生。

为什么在设置调试器断点或从本地连接时没有发生这种情况尚不清楚……也许是一些计时元素存储在那里。

于 2012-12-12T08:34:49.497 回答