在Mike O'Brien的这篇非常有用的摘要 Identities for different IIS7 Authentication Configurations 中,他概述了IIS 7如何处理不同设置的身份验证(我找不到类似的摘要) IIS 6,这是我们正在使用的版本。)
我们已将身份验证设置为集成Windows身份验证;匿名访问被关闭,我没有使用模拟。 asp.net应用程序位于Intranet中,但我无法控制(并且知之甚少)有多少域,它们如何相互交互等等。根据上面的文章,我应该获得所有三个相同的用户信息:
Thread.CurrentPrincipal.Identity
HttpContext.Current.User.Identity
Request.LogonUserIdentity
我做获取正确的用户,但外壳与AD名称不同。所以我的问题是:如果
Thread.CurrentPrincipal.Identity
(我正在使用的)提供了正确的AD名称,但显示了与AD不同的大小写,这很可能是Thread.CurrentPrincipal.Identity的问题,具有Intranet /域设置或IIS 6之间的差异&安培; IIS 7?
(对于这个问题的模糊性质道歉:我只是在寻找建议,以便最好地查看和/或输入关于使用Thread.CurrentPrincipal.Identity是否存在一些本质上不明智的东西)。
编辑更新IIS 6 - 根据此链接
http://msdn.microsoft.com/en-us/library/aa302377.aspx
我也应该为IIS 6获取DOMAIN \用户名,所以没有区别。问题可能与Kerberos / NTLM如何与IIS交互有关?
编辑#2:问题可归纳为:
我被显示为例如AD中的DOMAIN \ joebloggs。我以joebloggs身份登录。但是我使用Thread.CurrentPrincipal.Identity从(成功)身份验证中获得的凭据显示了DOMAIN \ JoeBloggs。那可能来自哪里?
答案 0 :(得分:0)
此案例中的用户名由客户提供。身份验证机制验证身份是否可以确认,但它不会将用户提供的名称替换为AD中的as-stored名称,因此没有理由期望外壳匹配。
答案 1 :(得分:0)
事实证明,我没有从客户端站点获得准确的信息:即身份验证 以我理解的方式发生(即ASP.Net:查找并从AD返回; ASP:传递到IIS)并且意外的外壳归结为缓存问题而不是认证机制。