在我的本地机器上,我在多个网站上工作,并在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>
不幸的是,当我尝试访问http://localhost/App1/internal/url.aspx时,我收到这个错误:
It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level. This error can be caused by a virtual directory not being configured as an application in 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,PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="Everywhere"/>
- </sectionGroup>
- </configSections>
- </configuration>
我必须做什么才能让我的网站设置自己的身份验证模式?
解决方法
您需要在Web.config中的应用程序级别启用Windows身份验证,然后在文件夹级别进一步定义授权,允许根目录下的所有用户,并拒绝所有未经身份验证的内部文件夹。
在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>