You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

IIS子文件夹禁用身份验证:实现my_public目录匿名访问需求

解决匿名用户访问my_public文件夹的问题

很明显是根目录的web.config全局开启了身份验证(大概率是Forms认证),导致子文件夹默认继承了“拒绝匿名访问”的规则。要让my_public文件夹允许匿名用户直接访问里面的about.aspx,只需要在该文件夹的web.config里添加针对性的授权配置就行,具体操作如下:

1. 配置my_public文件夹的web.config

直接在my_public目录下的web.config中写入以下内容,覆盖根目录的授权规则:

<?xml version="1.0"?>
<configuration>
  <!-- 适配经典ASP.NET管道模式 -->
  <system.web>
    <authorization>
      <!-- "?"代表匿名用户,这句是核心:允许匿名访问 -->
      <allow users="?" />
      <!-- 可选:明确拒绝其他未授权用户,不过allow规则优先级更高,不加也不影响 -->
      <deny users="*" />
    </authorization>
  </system.web>

  <!-- 适配IIS 7及以上的集成管道模式(必须加,否则配置可能不生效) -->
  <system.webServer>
    <security>
      <authorization>
        <add accessType="Allow" users="?" />
      </authorization>
    </security>
  </system.webServer>
</configuration>

2. 为什么这样配置能生效?

你的根目录web.config应该有类似这样的全局配置,它强制所有用户必须登录才能访问:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="app/login.aspx" />
  </authentication>
  <authorization>
    <!-- 全局拒绝匿名用户访问任何资源 -->
    <deny users="?" />
  </authorization>
</system.web>

子文件夹的web.config会默认继承根目录的配置,但我们通过<allow users="?" />直接覆盖了授权规则,给my_public文件夹开了“匿名访问”的特例。

3. 测试时的小提示

  • 先清除浏览器的缓存和Cookie,避免之前的登录状态干扰测试结果;
  • 确认IIS应用程序池的模式:如果是集成模式,system.webServer节点的配置必须存在;如果是经典模式,只需要system.web节点的配置就够;
  • 如果还是跳转登录页,检查根目录是否有<location>节点专门对my_public做了限制,这种情况下需要修改对应的location配置。

内容的提问来源于stack exchange,提问作者Łukasz Walkowiak

火山引擎 最新活动