IIS将旧用户名返回给我的应用程序

问题描述:

这是我的场景。我创建了一个使用集成Windows身份验证的应用程序来工作。在Application_AuthenticateRequest()中,我使用HttpContext.Current.User.Identity来获取我网站用户的当前WindowsPrincipalIIS将旧用户名返回给我的应用程序

现在,这里是有趣的部分。我们的一些用户最近结婚了,他们的名字也改变了。 (即用户的NT登录从jsmith更改为jjones),当我的应用程序验证它们时,IIS将我的旧登录传递给我。我继续看到jsmith传递给我的应用程序,直到我重新启动我的服务器!注销客户端不起作用。重新启动应用程序池不起作用。只有完全重新启动。

有人知道这里发生了什么吗?有什么我可以用来刷新缓存给我这个问题的命令?我的服务器配置有误吗?

注意:我绝对不想重新启动IIS,我的应用程序池或机器。由于这是一个生产箱,这些并不是真正可行的选择。


AVID -

是的,他们的UPN与他们的登录名一起改变。和Mark/Nick ...这是一个生产企业服务器...它不能只是重新启动或重新启动IIS。


跟进(为后人):

Grhm的回答得很正确。这个问题在低容量的服务器中弹出,在这些服务器中没有很多人使用你的应用程序,但是有足够的请求将用户的身份保存在缓存中。这似乎说明为什么缓存项没有10分钟后默认刷新KB的关键部分是:

缓存条目做超时,但是机会是由应用程序重复 查询保留现有高速缓存条目活动的最大生存期为 。

我不完全相信在我们的代码是什么原因导致这(重复查询),但为我们工作的决议是从1周看似淫秽默认LsaLookupCacheExpireTime值切成短短小时。这对于我们来说,将用户在现实世界中受到影响的可能性降低到基本为零,但同时又不会对我们的目录服务器造成极端数量的SID-Name查找。如果应用程序通过SID查找用户信息而不是将用户数据映射到文本登录名,那么更好的解决方案是IMO。 (请注意,供应商!如果您在应用程序中依赖于AD身份验证,则需要将SID置于您的身份验证数据库中!)

我最近有类似的问题,正如Robert MacLean的answer中所述,如果您未以用户身份登录,AviD的组策略更改不起作用。

我发现改变了LSA查找缓存大小描述是MS KB946358工作,无需重新启动或回收任何apppool或服务。

我发现这是作为对这个类似问题的回答:Wrong authentication after changing user's logon name

重新启动IIS,而不是整个机器,应该有所斩断。

+0

服务器具有从认证服务缓存的旧用户名。这应该工作。 – 2008-10-03 21:44:12

+2

-1:他明确表示他不想重新启动IIS – 2009-02-24 10:42:53

当这些用户的名字发生变化时,您是否只更改其NT登录名或UPN名? UPN名称是专有名称,由Kerberos使用 - 这是IWA的默认协议;但是,如果您只需在ActiveDirectory中单击以更改其名称,则只有NT登录名更改 - 即使这是他们用来登录(使用默认窗口GINA)的内容。在封面下,windows会将(新)NT登录名称转换为(旧)Kerberos名称。这一直持续到AD被迫根据NT登录名更新Kerberos名称...

如果不是只更改NT用户名的问题,那么它似乎认为服务正在缓存旧用户名。
您可以将其定义为禁用,转到本地安全设置(在管理工具中),根据版本/编辑/配置,可能与内存有关的设置是“要缓存的先前登录次数”,以及“不允许存储凭据...”。

其他因素来考虑:

  • 域成员身份可能会影响这一点,因为成员服务器可以继承域设置
  • 您可能还需要重新启动整个服务器一次,这才会影响(但那么你将不必担心未来的更新)。
  • 登录性能可能会受到影响。

因此,我建议您在部署生产(当然)之前先测试一下。

确定的AviD问题是Active Directory缓存,您可以通过registry进行控制。取决于您的解决方案Avid的组策略选项将失败或工作,具体取决于您是否实际登录用户。

它如何被缓存取决于你如何在IIS上进行身份验证。我怀疑它可能是Kerberos所以要做清除,如果它是由Kerberos造成的,你可能想尝试使用清除选项klist,它应该清除kerberos票据,这将在下一次尝试中强制AD到下一次尝试并更新详细信息。

我也建议看看实施this这是稍微复杂一些,但不太容易出错。

我知道我们在过去的IIS中也存在缓存的凭据问题,在谷歌搜索几天后,我们遇到了一个晦涩难懂的(至少对我们来说)命令,您可以使用它来查看和清除缓存的凭据。

开始 - >运行(或WINKEY + R)和类型控制keymgr.dll

这个固定我们的客户机的问题。没有在服务器上尝试过,但如果它的服务器缓存凭证可能值得一试。我们的问题是我们获得了旧的凭据,但仅在客户端机器的基础上。如果用户在一台单独的客户端机器上登录,一切都很好,但如果他们在办公桌上使用自己的机器,他们通常会使用它,并拥有缓存的旧凭证。

使用相关新登录名登录到运行IIS的服务器。这将刷新凭证而不重新启动IIS或重新启动服务器。

此链接"Changing the Default Interval for User Tokens in IIS"来自MicroSoft支持 应该有所帮助。

就像一个供参考我们有完全相同的问题。看起来对我们有用的是进入Active Directory并执行“刷新”。紧接着,我们不得不回收有此问题的Intranet网站上的应用程序池。