我将asp.net(动态数据)网站设置为另一个站点的子目录中的应用程序。此站点需要顶级站点的不同安全设置。类似的东西:
<authorization>
<allow roles="ADMIN"/>
<deny users="*"/>
</authorization>
子站点中将忽略这些设置。但是,它们在顶级站点上工作,但即使设置在顶级站点上,它们也不会被子站点继承,并且可以自由访问。什么可能导致这些设置被忽略?我试过添加:
<location path="." inheritInChildApplications="false">
到顶级web.config,然后在子站点中设置上述授权规则,甚至尝试拒绝所有用户。访问该网站时,它看起来像:http://mysite/mybrokensite
我正在使用Windows身份验证。
答案 0 :(得分:2)
我认为关键是这个
网站设置为一个应用程序 另一个网站的子目录
如果它是IIS中的单独应用程序,它应该拥有自己的web.config文件,并且可以从那里设置安全设置。因此,您将拥有一个主站点的web.config和一个子站点的web.config。他们真的是两个应用程序。
如果它只是您网站下的子文件夹,那么这不适用。这取决于您在IIS下如何设置它。如果它是一个单独的应用程序,那么该图标将是世界/白菜类型的图标。如果它是一个子文件夹,那么图标将是......一个文件夹。
答案 1 :(得分:0)
要详细说明Tim的答案,请确保在IIS中将其设置为虚拟目录。在IIS Admin,目录(或主目录)选项卡中查看该目录的属性页。如果应用程序标签显示为灰色,请单击“创建”按钮。现在IIS将从该目录加载web.config。
答案 2 :(得分:0)
我输入了一个摘要,因为很多人都遇到了与子文件夹身份验证相同的情况。
子文件夹授权
方案
假设主页不应该提示登录对话框。它应该让用户无需登录即可通过。但是,在相同的应用程序中,可能在另一个文件夹中,另一个页面需要使用用户网络登录ID来检查用户对数据库表的许可。默认情况下,IE会将所有网站仅用主机名称为Intranet。通过默认的Intranet设置,如果使用Windows身份验证,它将不会提示登录对话框并将用户登录名和密码传递给应用程序。但是,棘手的一方是,如果应用程序有一个实际域,IE会认为它是一个Internet站点,如果使用Windows身份验证,它将提示登录和密码。
不使用Windows身份验证为Internet站点提供登录对话框的唯一方法是在IIS中打开匿名身份验证。但是,您将失去捕获登录信息的能力,因为匿名优先于Windows身份验证。好消息是有一种方法可以解决这个问题。如果应用程序子文件夹需要捕获登录信息,则需要覆盖web.config中Location元素中的父授权。
1在IIS中,按如下方式配置身份验证:
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>