Windows身份验证与“LOGON_USER”服务器变量不一致

时间:2013-02-28 13:36:07

标签: asp.net iis forms-authentication

另一位开发人员和我都在使用相同的ASP.NET Web应用程序。该应用程序使用表单身份验证,但IIS虚拟目录配置了“匿名访问”和“集成Windows身份验证”。这反映了根据需要进行身份验证的生产站点。

我们两个设置之间的一个潜在关键区别是他在Windows 7和IIS 7上,而我在Windows XP和IIS 5上(为了我的罪)。

最初,当我们都运行应用时,变量...

HttpContext.Current.User.Identity.IsAuthenticated
...为false。我希望这是因为我们配置了Forms身份验证。该应用程序然后重定向到WindowsAuth.aspx页面。该页面检查Request.ServerVariables [“LOGON_USER”]服务器变量,如果它不为null或为空,则使用它来自动登录。

问题是,在我的PC上,Request.ServerVariables [“LOGON_USER”]始终为空。对我来说这是正确的,因为我们启用了匿名访问。但是在我的同事的PC上,在生产中,变量保存用户的用户名。我不明白为什么会这样。在这方面,IIS 5和7之间有区别吗?否则,你能解释一下吗?显然,我希望我的设置能够反映其他环境,但此时升级到Windows 7是最后的手段。

1 个答案:

答案 0 :(得分:0)

https://support.microsoft.com/en-us/kb/306359

要在使用除None之外的任何身份验证模式时填充LOGON_USER变量,您可以拒绝在Web.config文件部分中对匿名用户的访问。要拒绝访问该部分中的匿名用户,请按照下列步骤操作:

将Web.config文件中的身份验证模式更改为None以外的任何其他模式。例如,Web.config文件中的以下条目将身份验证模式设置为基于表单的身份验证:

 <authentication mode="Forms" />

要拒绝访问Web.config文件中的匿名用户,请使用以下语法:

<authorization>
   <deny users = "?" /> <!-- This denies access to the Anonymous user -->
   <allow users ="*" /> <!-- This allows access to all users -->
</authorization>

如果您使用的是Windows身份验证,还可以使用以下步骤解决此问题: 将Web.config文件中的身份验证模式更改为Windows,如下所示:

<authentication mode="Windows" />

在Internet服务管理器中,右键单击.aspx文件或“Web项目”文件夹,然后单击“属性”。 如果单击“Web项目”文件夹的“属性”,请单击“目录安全性”选项卡。如果单击.aspx文件的“属性”,请单击“文件安全性”选项卡。

在“匿名访问和身份验证控制”下,单击“编辑”。 在“身份验证方法”对话框中,清除“匿名访问”复选框,然后选中“基本”,“摘要”或“集成(NT质询/响应)”复选框。 单击“确定”关闭两个对话框。