1

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

我们两种设置之间潜在的关键区别是他使用的是 Windows 7 和 IIS 7,而我使用的是 Windows XP 和 IIS 5(因为我的罪过)。

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

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

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

4

1 回答 1

0

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

要在使用无以外的任何身份验证模式时填充 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 质询/响应)复选框。单击“确定”关闭这两个对话框。

于 2015-09-23T13:49:33.563 回答