在根站点下托管的应用程序中配置子目录身份验证模式

Jac*_*cob 18 asp.net iis web-config

在我的本地计算机上,我在多个网站上工作,并在"默认"网站下的IIS下运行它们.这样我就可以通过这种类型的URL访问网站:http:// localhost/App1 /.这是结构:

LocalDev (site)
    App1 (application)
    App2 (application)
    App3 (application)

我遇到的问题是在App1中,我试图在App1的子目录上启用Windows身份验证,如下所示:

<configuration>
  <location path="internal">
    <system.web>
      <authentication mode="Windows"/>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试访问http://localhost/App1/internal/url.aspx时,我收到此错误:

在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的.此错误可能是由于未在IIS中将虚拟目录配置为应用程序引起的.

App1设置为应用程序,而不是虚拟目录.我已经尝试更改我的machine.config以允许在任何地方更改身份验证部分:

<configuration>
  <configSections>
    <sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
      <section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="Everywhere"/>
    </sectionGroup>
  </configSections>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让我的网站设置自己的身份验证模式?

Sum*_*umo 19

您需要在Web.config中的应用程序级别启用Windows身份验证,然后在文件夹级别进一步定义授权,允许root用户的所有用户并拒绝所有未经身份验证的internal文件夹.

在IIS中,确保为应用程序启用了匿名身份验证Windows身份验证.然后,修改您的Web.config,如下所示:

<configuration>
  <system.web>
      <authentication mode="Windows"/>
      <authorization>
        <allow users="*"/>
      </authorization>
  </system.web>
  <location path="internal" allowOverride="true">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)