【问题标题】:Authorization settings for a folder in ASP.NETASP.NET 中文件夹的授权设置
【发布时间】:2011-03-23 11:26:55
【问题描述】:
我有一个 asp.net 网站,我想限制所有用户访问一个名为“log”的文件夹,我在 web.config 中有这个元素:
<location path="log">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
和 system.web 中之前的这个元素:
<authorization>
<allow users="*"/>
</authorization>
但我仍然可以访问此网址:http://www.mydomain.com/log/log.txt
有什么想法吗?
谢谢。
【问题讨论】:
标签:
asp.net
web-config
authorization
【解决方案1】:
.txt 默认情况下,ASP.NET 不处理文件。您必须阻止从 IIS 中访问该文件夹。
如果您使用的是 IIS 7,则可以使用 Request Filtering 来实现此目的。
【解决方案2】:
为了避免这种混淆,我通常在需要设置不同权限的目录中创建一个 web.config 文件。
如果您将 web.config 文件放在日志文件夹中,它会正常工作(并且检查文件夹中应用的权限会变得更容易)
例子:
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
【解决方案3】:
我输入了一个摘要,因为许多人在子文件夹身份验证方面面临同样的情况。
子文件夹授权
- ASP.NET 只能有一个
身份验证模式为一个
应用。
- 不同的
应用程序不能共享资源
其中。
场景
假设主页不应该提示登录对话框。它应该让用户在没有任何登录的情况下通过。但是,在同一个应用程序中,可能在不同的文件夹中,另一个页面需要使用用户网络登录 ID 来检查用户对数据库表的权限。默认情况下,IE 将所有只有主机名的网站视为 Intranet。根据其默认的 Intranet 设置,如果使用 Windows 身份验证,它将不会提示登录对话框并将用户登录名和密码传递给应用程序。但是,棘手的是,如果应用程序有一个实际的域,IE 会认为它是一个 Internet 站点,如果使用 Windows 身份验证,它会提示登录名和密码。
不提示使用 Windows 身份验证的 Internet 站点的登录对话框的唯一方法是同时在 IIS 中打开匿名身份验证。但是,您将无法捕获登录信息,因为匿名优先于 Windows 身份验证。好消息是有办法解决这个问题。如果应用程序子文件夹需要捕获登录信息,则需要覆盖 web.config 中 Location 元素中的父授权。
1 在 IIS 中,配置 Authentication 如下:
- 启用匿名身份验证,
- 启用 Windows 身份验证
2 在 Web.Config 中添加以下内容。
<authentication mode="Windows" />
<authorization>
<allow users="*" />
</authorization>
<!-- secured is the relative subfolder name. deny anonymous user, so only the authenticated login will pass through -->
<location path="secured" allowOverride="true">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>