Windows 身份验证是如何工作的? Web.config 好像不够

How does Windows Authentication really work? Web.config seems not enough

正在尝试修复 windows 身份验证。 Objective: Windows 身份验证。对于 Firefox,应该会出现一个登录对话框,而对于 Internet Explorer,windows 用户名和密码应该会自动转到 Web 服务器。

我使用 Empty 模板建立了一个非常小的 Web 应用程序项目。 Web.config 看起来像这样:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime targetFramework="4.5"/>
    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" .../>
      <compiler language="vb;vbs;visualbasic;vbscript" ..."/>
    </compilers>
  </system.codedom>
</configuration>

运行 此站点在 FF 或 IE 中给出 401 未经授权的响应,而不是登录对话框。为什么?

然后我创建了另一个新的 Web 应用程序项目,现在将 WinForms 模板和身份验证设置为 Windows。这会创建一些 semi-interesting 虚假内容,包括带有菜单的页面 header 和显示已登录用户的 windows 名称。

在web.config中我将权限改为:

<allow users="*"/>

运行 这个站点在 FF 中显示一个登录对话框,在 IE 中它在 header.

中显示带有我的 windows 用户名的页面

现在我改为:

<authentication mode="None" />

运行 FF 中的此站点显示登录对话框,而我希望无需登录即可看到该页面。使用 IE,该页面显示时没有我的 windows 用户名header.

我的结论是,设置身份验证不仅仅是 web.config 中的那两个地方。如果我对此了解得更多,我就可以在我的真实 Web 项目中解决一些类似的问题。请帮忙!

睡了一觉后,我萌生了搜索web服务器配置的想法。原来 VS2015 使用 IIS Express。在 SO 上,我发现 IIS Express 配置文件位于解决方案的 .vs 目录中,其中新项目模板写道匿名访问已禁用。这解释了 Firefox 中的登录对话框,即使 web.config 具有 Authentication Mode=None.

我还从 Hanselman 中发现了一些有趣的信息:在 VS2015 解决方案资源管理器中,在项目上按 F4 可以看到一些在 属性 页面中找不到的项目。例如。匿名身份验证 Enabled/Disabled,但这似乎与 .vs 中的配置无关!?

看来有些事情就是不能简单化。我使用 Apache Web 服务器工作,被大量的设置吓坏了,但至少每一个都被清楚地记录下来。 Windows 享有使用 GUI 工具使事情变得用户友好的声誉,因此我发现仍然不得不处理较少记录的选项,例如隐藏目录 .vs 中的 xml 配置文件。