限制对 web.config 中的文件/文件夹的访问

mat*_*tpm 0 asp.net iis asp.net-mvc web-config

我尝试了各种尝试限制对文件夹的访问的变体,从最简单的拒绝所有用户访问和仅授予我自己访问权限到尝试角色/用户等的组合。特别是,该文件夹具有混合aspx 和 html 文件。

任何人都可以提供帮助吗?以下是我基于其他类似问题的基本信息:

<configuration>
    <system.web>
       <!-- mode=[Windows|Forms|Passport|None] -->
       <authentication mode="Windows" />
    </system.web>
  <system.webServer>
    <handlers>
        <add name="HTMLHandler" type="System.Web.StaticFileHandler" path="*.html" verb="GET" />
    </handlers>
  </system.webServer>
    <location path="AdminOnly">
        <system.web>
            <authorization>
            <deny users="*" />
            <allow users="domain\user1, domain\user2, domain\user3" />
            <allow roles="domain\role1, domain\role2" />
            </authorization>
        </system.web>
    </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

编辑 解决方案终于提出了。

它结合了对授权部分的理解(感谢 Tetsuya 提供有关排序授权规则的有用提示),包括处理程序部分以及为托管代码配置应用程序池。

Tet*_*oto 5

似乎您在组合authorization元素中的顺序有误,allow必须先声明该部分以允许某些用户担任某些角色,然后再拒绝其他所有内容。

因此,由于在允许定义的用户之前拒绝所有用户解析,因此以下构造是错误的:

<location path="AdminOnly">
    <system.web>
        <authorization>
        <deny users="*" />
        <allow users="domain\user1, domain\user2, domain\user3" />
        <allow roles="domain\role1, domain\role2" />
        </authorization>
    </system.web>
</location> 
Run Code Online (Sandbox Code Playgroud)

正确的顺序应该是这样的:

<location path="AdminOnly">
    <system.web>
        <authorization>
        <allow roles="role1, role2" />
        <allow users="user1, user2, user3" />
        <deny users="*" />
        </authorization>
    </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

在参考部分,Guru Sarkar 解释了问题所在:

常见错误

我看到有人抱怨他们已经正确设置了他们的角色并且还进入了他们的 web.config,但他们的授权仍然不起作用。即使他们允许访问他们的角色,用户也无法访问特定页面/文件夹。这样做的常见原因是放置<deny../>before <allow ../>。由于授权是从上到下完成的,因此会检查规则直到找到匹配项。

参考:

在 web.config 中为特定页面或文件夹设置授权规则