为什么将 web.config 更改为 Windows 模式不会影响 IIS 身份验证设置?

为什么将 web.config 更改为 Windows 模式不会影响 IIS 身份验证设置?

我读过这篇文章https://msdn.microsoft.com/en-us/library/532aee0e(v=vs.100).aspx 它说 Framework 4 中的默认身份验证是Windows 模式

好吧,我使用 Visual Studio 2003 创建了一个 MVC 4 Internet 模板项目,它创建了下一个 web.config。

<?xml version="1.0" encoding="utf-8"?>
<!--
  Para obtener más información sobre cómo configurar la aplicación de ASP.NET, visite
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcApplication2-20150709164700;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MvcApplication2-20150709164700.mdf" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
   ...
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
       ...
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
  <handlers>
     ...
    </handlers></system.webServer>
  <runtime>
  ...
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
</configuration>

可以看到自动生成的代码:

<authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>

现在我的问题是,如果我发布此网站并转到 IIS,您会看到启用了两种模式:匿名和表单身份验证:

在此处输入图片描述

现在,如果你删除代码

<authentication mode="Forms">
          <forms loginUrl="~/Account/Login" timeout="2880" />
        </authentication>

为什么 IIS 中没有显示 Windows 身份验证已启用?根据 msdn 的说法,默认情况下不应该启用该身份验证吗?

在此处输入图片描述

答案1

您混淆了两个不同的authentication部分。

MSDN 文章和您的 web.config 处理:

<configuration><system.web><authentication>

系统网站具有 ASP.NET 的所有设置

您在 IIS 管理器中看到的内容是:

<configuration><system.webServer><security><authentication>

系统.web服务器用于全局 IIS 设置

<system.webServer>根据 IIS 中的委托设置,GUI 中的更改可能不会显示在您的 web.config 中。如果是这样,您可以在

%systemroot%\System32\inetsrv\config\applicationHost.config 

在文件底部。

您应该了解这两个节点的区别,以确定您应该使用哪一个。

相关内容