这是我的情景.我创建了一个使用集成Windows身份验证的应用程序.在Application_AuthenticateRequest()
,我HttpContext.Current.User.Identity
用来获取WindowsPrincipal
我的网站用户的当前.
现在这是有趣的部分.我们的一些用户最近结婚了,他们的名字也发生了变化.(即用户的NT登录名更改jsmith
为jjones
),当我的应用程序对其进行身份验证时,IIS会将其OLD LOGIN传递给我.我继续看到jsmith
传递给我的应用程序,直到我重启我的服务器!注销客户端不起作用.重新启动应用程序池不起作用.只有完全重启.
有谁知道这里发生了什么?是否有某种命令我可以用来刷新任何缓存给我这个问题?我的服务器配置错误了吗?
注意:我绝对不想重新启动IIS,我的应用程序池或计算机.由于这是一个生产箱,这些并不是真正可行的选择.
AviD -
是的,他们的UPN和他们的登录名一起被更改了.而Mark/Nick ......这是一个生产企业服务器...它不能只是重新启动或重新启动IIS.
跟进(后代):
格尔姆的答案是现场的.在您没有很多人使用您的应用程序的低容量服务器中会弹出此问题,但会有足够的请求将用户的身份保留在缓存中.KB的关键部分似乎描述了默认值为10分钟后缓存项未刷新的原因:
缓存条目会超时,但是应用程序的重复查询可能会使现有缓存条目保持活动状态达到缓存条目的最大生命周期.
我不确定我们的代码中是什么导致了这种情况(反复出现的查询),但对我们有用的解决方案是将LsaLookupCacheExpireTime
值从看似淫秽的默认值1周减少到几个小时.对我们而言,这可以将用户在现实世界中受到影响的概率降低到基本为零,但同时不会对我们的目录服务器造成极端数量的SID-Name查找.如果应用程序通过SID查找用户信息而不是将用户数据映射到文本登录名,则IMO将是更好的解决方案.(请注意,供应商!如果您在应用程序中依赖AD身份验证,则需要将SID放入身份验证数据库中!)
我最近遇到了类似的问题,正如Robert MacLean的回答所述,如果您没有以用户身份登录,AviD的组策略更改将无效.
我发现更改了LSA查找缓存大小,如MS KB946358所述,无需重新启动或回收任何apppool或服务.
我发现这是对这个类似问题的回答:更改用户登录名后的身份验证错误.
您可能希望查看以下系统调用,例如以下系统调用:
LookupAccountName() LookupAccountSid() LsaOpenPolicy()
您可以使用它们编写C++/CLI(/ Managed-C++)应用程序来查询LSA缓存.