上周,一名员工的 Active Directory 用户名已更改(或为其创建了一个新用户名)。为了便于说明,我们假设以下用户名:
Old: Domain\11111
New: Domain\22222
当此用户现在使用其新用户名登录并尝试使用以下方式浏览多个 ASP.NET 应用程序中的任何一个时仅有的Windows 身份验证(未启用匿名),系统会进行身份验证,但我们下一层数据库驱动的权限阻止他们获得授权。我们将其追溯到他们的登录帐户和 IIS 认为的用户名不匹配。以下是在 Windows 2008 IIS7.5 环境中运行的应用程序的几个 ASP.NET 变量的输出:
Request.ServerVariables["AUTH_TYPE"]: Negotiate
Request.ServerVariables["AUTH_USER"]: Domain\11111
Request.ServerVariables["LOGON_USER"]: Domain\22222
Request.ServerVariables["REMOTE_USER"]: Domain\11111
HttpContext.Current.User.Identity.Name: Domain\11111
System.Threading.Thread.CurrentPrincipal.Identity.Name: Domain\11111
从上面可以看出,只有 LOGON_USER 服务器变量具有正确的值,即用户用于登录其计算机的帐户。但是,我们使用“AUTH_USER”变量来查找数据库权限。
在单独的测试环境中(完全不同的服务器:Windows 2003、IIS6),所有上述变量都显示“Domain\22222”。因此,这似乎是特定于服务器的问题,就像凭据以某种方式缓存在他们的机器上或服务器上(前者似乎更合理)。
所以问题是:我如何确认是用户的机器还是服务器搞砸了请求?我该如何解决这个问题?
我查看了以下两种资源,并将很快尝试第一种:
- http://www.interworks.com/blogs/jvalente/2010/02/02/removing-saved-credentials-passwords-windows-xp-windows-vista-or-windows-7
- https://stackoverflow.com/questions/2325005/classic-asp-request-servervariableslogon-user-returning-wrong-username/5299080#5299080
谢谢。
答案1
该问题看起来与此处的问题类似:
https://stackoverflow.com/questions/168946/iis-returning-old-user-names-to-my-application
为了澄清起见,这里是解决方案: