问题:
启用authPersistNonNTLM时,如何控制TCP会话的范围?
背景:
我正在对IIS 7中托管的ASP.NET应用程序进行性能分析,该应用程序使用Kerberos进行身份验证,我们发现使用Windows身份验证时的响应时间显着增加(有时甚至高达1000%)只是匿名身份验证。
经过一些搜索后,我想到了this article建议使用authPersistNonNTLM设置来减少到服务器的往返次数。
我现在再次运行我的测试,并且确实看到了实质性的改进。
但是我仍然不清楚这是如何工作的技术细节,我们有以下场景提出了一些关于潜在安全漏洞的问题。
情景:
我们的一个应用程序是一个WPF胖客户端,它连接到我们希望应用此设置的几个ASP.NET服务。安装客户端的计算机在用户之间共享(具有单独的登录路径),这些用户可以在ASP.NET服务中具有各种不同的权限集。因此,关注的是具有更高权限的用户当天注销,具有较少权限的新用户登录并保留前一用户的权限。
我已经做了一些初步的烟雾测试,并且这种情况下的接缝处理得当,但我想了解正在发生的事情的技术细节。
答案 0 :(得分:1)
服务器所做的是它将经过身份验证的SSPI上下文存储在连接中。这意味着连接绑定到用户,如果您模拟具有该连接的用户,则客户端不得重用此连接。因为服务器不会为auth重新进行操作,所以理论上你会进行身份盗用。我确信微软确实在其HTTP堆栈中正确实现了这一点,尽管它有其他问题。
一旦HTTP(TCP)连接断开,服务器就应删除所有敏感信息(SSPI上下文)。微软的代码已关闭,所以我只能做出假设,但我有一些有效的C代码可以告诉你这是如何工作的。