Active Directory 中的用户已更改其 SAM 帐户名,但运行 IIS 的 Web 应用程序仍可根据其旧的 SAM 帐户名识别他。我推测这是因为 AD 主体已被缓存。
请求中的 IIS 服务器变量表明不匹配:
- LOGON_USER:旧用户名
- AUTH_USER:新用户名
如何从服务器的缓存中清除主体,以便它获取新的 SAM 帐户名(最好不要重新启动服务器或等待 720 分钟的缓存到期时间)?
答案1
看http://support.microsoft.com/kb/946358寻找可能的解决方案(设置 LsaLookupCacheMaxSize 0)
另请参阅http://technet.microsoft.com/en-us/library/ff428139(WS.10).aspx(如何在 Windows 中映射 SID 和帐户名称)
答案2
KB946358 为您指明了正确的方向。服务器重启时,LSA 缓存将被清除,或者可能被完全禁用(但这需要先重启)。
我非常想找到精确的重现步骤。请参阅我对此的问题- 目前仍无答案,但它包含一个无需重启即可修复重命名用户的解决方案。重命名后,您必须在 LSA 缓存中存在过期日期的服务器上运行以下 PS 脚本:
$objuser = new-object system.security.principal.ntaccount "domain\<new account name>"
$objuser.translate([system.security.principal.securityidentifier])
来源:http://www.myfatblog.co.uk/index.php/2012/07/kerberos-web-services-and-getting-married/
我尝试了这个解决方案并确认它有效。
你还可以发现以下关于这个主题的有趣文章:
https://marclsitinfrablog.wordpress.com/2011/06/25/lsa-lookup-cache/
如果有人能解释我如何重现这种情况,或者至少告诉我如何重现这种情况,我将不胜感激,“应用程序的重复查询使现有缓存条目在缓存条目的最大生存期内保持活动状态。”(这是对问题原因的简短而简洁的解释,来自KB946358)