允许对 web.config 中的单个文件夹进行匿名身份验证?

Posted

技术标签:

【中文标题】允许对 web.config 中的单个文件夹进行匿名身份验证?【英文标题】:Allow anonymous authentication for a single folder in web.config? 【发布时间】:2012-04-27 13:00:03 【问题描述】:

所以这是场景,我有一个 Asp.Net 应用程序,它使用自定义身份验证和成员资格提供程序,但我们需要允许完全匿名访问(即)应用程序中的特定文件夹。

在IIS管理器中,可以设置文件夹的认证方式,但设置保存在C:\Windows\System32\inetsrv\config\applicationHost.config文件as described here中

为了使安装更容易,如果我可以在我的 web.config 中设置它会很棒,但经过几次尝试我认为这可能是不可能的。

还有人知道吗?

非常感谢

【问题讨论】:

为什么要允许匿名访问该文件夹? 大部分应用应该只对购买了访问权限的人开放,但我们希望向外界公开一些免费内容(以诱使人们购买访问权限)。 它最常见的问题和答案很简单 【参考方案1】:

第一种方法是使用<location> 配置标签和<allow users="?"/> 修改您的web.config 以允许匿名或<allow users="*"/> 为所有人:

<configuration>
   <location path="Path/To/Public/Folder">
      <system.web>
         <authorization>
            <allow users="?"/>
         </authorization>
      </system.web>
   </location>
</configuration>

如果该方法不起作用,那么您可以采用以下方法,该方法需要对 IIS applicationHost.config 进行少量修改。

首先,在 C:\Windows\System32\inetsrv\config\applicationHost.config 中将 anonymousAuthentication 部分的 overrideModeDefault 从“拒绝”更改为“允许”:

<section name="anonymousAuthentication" overrideModeDefault="Allow" />

overrideMode 是 IIS 的一项安全功能。如果在 applicationHost.config 中的系统级别不允许覆盖,则您无法在 web.config 中执行任何操作来启用它。如果您在目标系统上没有此级别的访问权限,则必须与您的托管服务提供商或系统管理员进行讨论。

其次,在设置overrideModeDefault="Allow"之后,你可以在你的web.config中加入以下内容:

<location path="Path/To/Public/Folder">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
</location>

【讨论】:

原帖专门引用了applicationHost.config文件。对于与您的场景的特定限制不匹配的原始帖子,对答案的否决似乎很苛刻。 "如果我能在我的 web.config 中设置这个就好了" 不幸的是,情况并非如此,因为 overrideMode 是 IIS 的一项安全功能。如果在 applicationHost.config 中的系统级别不允许覆盖,则您无法在 web.config 中执行任何操作来启用它。因此,如果您在目标系统上没有该级别的访问权限,则必须与您的托管服务提供商或系统管理员进行讨论。 现在,这就是答案。如果您不愿意将其添加到您发布的答案中,请删除我的 -1 甚至 +1 您的答案。 根据反馈更新答案,请再看一下。【参考方案2】:

使用&lt;location&gt; 配置标签,&lt;allow users="?"/&gt; 只允许匿名或&lt;allow users="*"/&gt; 允许所有人:

<configuration>
   <location path="Path/To/Public/Folder">
      <system.web>
         <authorization>
            <allow users="?"/>
         </authorization>
      </system.web>
   </location>
</configuration>

【讨论】:

这是我第一次尝试但它不起作用。我怀疑这些位置授权设置仅在使用 Forms 身份验证运行时才有效。 Chris Fewtrell 似乎就是这样。当然,使用 Windows 身份验证,您将这些设置为什么似乎并不重要。【参考方案3】:
<location path="ForAll/Demo.aspx">
 <system.web>
  <authorization>
    <allow users="*" />
  </authorization>
 </system.web>
</location>

另外:如果你想通过网站在那个文件夹上写东西,你必须给这个文件夹的 IIS_User 权限

【讨论】:

【参考方案4】:

为了让它工作,我像这样构建我的目录:

项目 民众 限制

所以我为我的公共文件夹编辑了我的 webconfig:

<location path="Project/Public">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

对于我的受限文件夹:

 <location path="Project/Restricted">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorizatio>
    </system.web>
  </location>

请参阅此处了解 * 和 ? 的规范:

https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/authorization/add

我希望我有所帮助。

【讨论】:

【参考方案5】:

我将 web.config 添加到特定文件夹中,例如“用户”(VS 2015,C#) 并添加以下代码

<?xml version="1.0"?>
 <configuration>
  <system.web>
    <authorization>     
    <deny users="?"/>
  </authorization>
</system.web>
</configuration>

最初我使用了位置标签,但没有奏效。

【讨论】:

以上是关于允许对 web.config 中的单个文件夹进行匿名身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过web.config文件中的Access-Control-Allow-Origin允许多个源域?

Web.config 允许特定用户访问位置

如何通过 web.config 文件中的 Access-Control-Allow-Origin 允许多个源域?

Web.config 不工作 - 访问控制允许来源

使用 web.config 允许服务器端包含在 HTML 文件 (IIS) 中

Web.Config 将单个 AppSettings 转换为 ConfigSource