这是我的场景。我创建了一个使用集成 Windows 身份验证的应用程序才能工作。在Application_AuthenticateRequest()
中,我HttpContext.Current.User.Identity
用来获取WindowsPrincipal
我网站用户的当前信息。
现在这是有趣的部分。我们的一些用户最近结婚了,他们的名字发生了变化。(即用户的 NT 登录从 更改jsmith
为jjones
),当我的应用程序对其进行身份验证时,IIS 将他们的 OLD LOGIN 传递给我。我继续看到jsmith
传递给我的应用程序,直到我重新启动我的服务器!注销客户端不起作用。重新启动应用程序池不起作用。只有完全重启。
有谁知道这里发生了什么?是否有某种命令我可以用来刷新任何给我这个问题的缓存?我的服务器配置错误吗?
注意:我绝对不想重新启动 IIS、我的应用程序池或机器。由于这是一个生产盒,这些都不是真正可行的选择。
狂热 -
是的,他们的 UPN 连同他们的登录名一起改变了。还有马克/尼克……这是一个生产企业服务器……它不能只是重新启动或重新启动 IIS。
跟进(为后代):
Grhm 的回答很到位。这个问题出现在低容量服务器中,您没有很多人使用您的应用程序,但会发出足够多的请求以将用户的身份保存在缓存中。KB中似乎描述了为什么默认 10 分钟后不刷新缓存项的关键部分是:
缓存条目确实会超时,但是应用程序的重复查询可能会在缓存条目的最大生命周期内保持现有缓存条目处于活动状态。
我不确定我们的代码中是什么导致了这种情况(重复查询),但对我们有用的解决方案是将LsaLookupCacheExpireTime
值从看似淫秽的默认值 1 周减少到仅几个小时。对我们来说,这将用户在现实世界中受到影响的可能性降低到基本上为零,但同时不会导致对我们的目录服务器进行极端数量的 SID-Name 查找。如果应用程序通过 SID 查找用户信息,而不是将用户数据映射到文本登录名,则 IMO 更好的解决方案是。(注意,供应商!如果您在应用程序中依赖 AD 身份验证,则需要将 SID 放入身份验证数据库中!)