允许对 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】:使用<location>
配置标签,<allow users="?"/>
只允许匿名或<allow users="*"/>
允许所有人:
<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 文件中的 Access-Control-Allow-Origin 允许多个源域?