如何允许匿名用户访问虚拟目录

How to allow anonymous user access to virtual directory

我目前正在阻止匿名用户访问我的根应用程序。

/web.config

  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>

但我允许匿名访问 public 资源(图片、CSS 等):

  <location path="Images">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

现在,我想添加一个匿名用户应该可以访问的虚拟目录。我添加了一个基于图像路径的配置,但每当我尝试访问该位置时,我都会被重定向到登录页面,其中 ReturnURL 设置为虚拟目录。

  <location path="virtualDirectory">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

此外,我尝试在我的虚拟目录 web.config 中指定全局授权,但收到一条错误消息说我只能拥有一次

/virtualDirectory/web.config:

  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>

当我的根应用程序阻止匿名访问时,如何允许匿名访问虚拟目录?

在您的全局 web.config 中删除

<location path="virtualDirectory">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
 </location>

然后转到 IIS 管理器并

  1. 在虚拟目录主页区域,双击身份验证

  2. 右键单击“匿名身​​份验证”,然后单击“启用”

您的授权规则看起来不错。您得到的最后一个错误是因为每个 folder/file/path 只能有一次授权部分(实际上是任何部分)。因此,要么在全球范围内使用它,即在 <location path="virtualDirectory"> 下,要么仅在虚拟目录的 web.config 中。在两个地方都有它会给你一个错误。什么是在虚拟目录中设置的身份验证。

确保匿名 与允许授权规则一起启用。 (IIS 管理器 -> 站点 -> 您的特定站点 -> 虚拟目录 -> 在中央窗格中验证)

在 IIS GUI 中还有 ASP.NET 授权规则(您当前使用的规则)和 IIS 授权规则。确保没有任何拒绝 IIS 授权规则。

在你的全局web.config封装

<system.web>
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

<location path="." inheritInChildApplications="false">
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>   
</location>

这意味着 - 授权仅在根应用程序中强制执行,而不是针对子应用程序。

一些笔记。

  1. 星号(*)代表所有身份。

  2. 问号(?)代表匿名身份

  3. 所以理想情况下,您不需要在全局 web.config.

  4. 中设置允许对您的虚拟目录的匿名用户进行身份验证
  5. 转到 IIS,在您的虚拟目录下 > select 身份验证 > 启用匿名身份验证。

参考

ASP.NET Authorization

How to: Create and Configure Virtual Directories in IIS