上周,员工的Active Directory用户名被更改(或者为他们创build了新的用户名)。 为了这个例子的目的,我们假设这些用户名:
Old: Domain\11111 New: Domain\22222
当这个用户现在使用他们的新用户名login,并尝试浏览到任何一个ASP.NET应用程序只使用Windows身份validation(不启用匿名),系统进行身份validation,但我们的下一层数据库驱动的权限阻止他们从被授权。 我们追踪到他们的login帐户和IIS认为他们是谁之间的用户名不匹配。 以下是在Windows 2008 IIS7.5环境中运行的应用程序的几个ASP.NETvariables的输出:
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服务器variables具有正确的值,这是用户用来login到他们的机器的帐户。 但是,我们使用“AUTH_USER”variables来查找数据库权限。
在单独的testing环境(完全不同的服务器:Windows 2003,IIS6)中,以上所有variables都显示“Domain \ 22222”。 所以这似乎是一个特定于服务器的问题,就像凭证以某种方式caching在他们的机器或服务器上(前者似乎更合理)。
所以问题是:我如何确认是用户的机器还是服务器正在处理请求? 我应该如何解决这个问题?
我看了下面两个资源,很快就会给出第一个资源:
谢谢。
这个问题在这里看起来类似于这个问题:
https://stackoverflow.com/questions/168946/iis-returning-old-user-names-to-my-application
澄清这里是解决scheme: