使用 AuthPersistNonNTLM 时 tcp 会话的范围是什么?

What is the scope of the tcp session when AuthPersistNonNTLM is used?

问题:

启用 authPersistNonNTLM 时如何控制 TCP 会话的范围?

背景:

我正在对 IIS 7 中托管的 ASP.NET 应用程序进行性能分析,该应用程序使用 Kerberos 进行身份验证,我们看到使用 Windows 身份验证时的响应时间显着增加(有时高达 1000%) 与仅匿名身份验证相比。

经过一番搜索后,我发现 this article 建议使用 authPersistNonNTLM 设置来减少到服务器的往返次数。

我现在已经 运行 我的测试再次打开,确实看到了实质性的改进。

不过,我仍然不清楚其工作原理的技术细节,我们遇到了以下场景,提出了一些有关潜在安全漏洞的问题。

场景:

我们的一个应用程序是 WPF 胖客户端,它连接到我们希望将此设置应用到的几个 ASP.NET 服务。安装客户端的机器在用户之间共享(当然需要单独登录),这些用户可以在 ASP.NET 服务中设置各种不同的权限。因此,担心的是具有较高权限的用户当天注销,具有较低权限的新用户登录并保留前一个用户的权限。

我已经做了一些初步的冒烟测试,看起来这种情况处理得当,但我想了解正在发生的事情的技术细节以确保。

服务器所做的是存储经过身份验证的 SSPI 上下文 in/with 连接。这意味着该连接已绑定到用户,如果您使用该连接模拟用户,则您的客户端不得重复使用该连接。因为服务器不会重新请求身份验证,所以理论上您会执行身份盗用。我确信 Microsoft 确实在其 HTTP 堆栈中正确实现了这一点,尽管它还有其他问题。

一旦 HTTP (TCP) 连接断开,服务器将删除所有敏感信息(SSPI 上下文)。 Microsoft 的代码是封闭的,所以我只能做出假设,但我有一些可用的 C 代码来向您展示它是如何工作的。