【问题标题】:II6 Basic Authentication and RouteTable.RoutesII6 基本身份验证和 RouteTable.Routes
【发布时间】:2025-12-30 23:25:12
【问题描述】:

我有一个在 IIS6/Server 2003 实例上运行的 ASP.NET 4.0 WebForms 站点。该站点本身不允许匿名访问,并在用户进入表单身份验证屏幕之前使用 IIS 基本身份验证。但是,在站点级别以下有两个站点节点,它们是允许匿名访问的虚拟目录(用于请求其他机器的静态图像)。

一个新请求要求我将这些请求路由到不同的页面并检查所请求的 URL 并执行不同的任务。我在 Global.asax 文件中使用 MapPageRoute 方法,并通过 Web.config 设置 <allow users="*" /> 的表单身份验证清除路由。显然,这在本地工作得很好,但是当部署到 IIS6 机器时,基本身份验证会在请求被路由之前启动。

有没有什么好的方法可以“伪造”或者在IIS6中创建一个虚拟目录节点并授予它匿名访问权限,以便路由的url请求可以执行?

【问题讨论】:

    标签: asp.net routing iis-6 url-routing


    【解决方案1】:

    这可能不适用于所有人,但在我的例子中,HTTP 身份验证主要是为了防止人们多次尝试登录页面,我实际上从站点和所有虚拟目录节点中删除了基本身份验证。

    然后我将它添加到正在使用的 ~/[loginpage] 中。由于正在使用表单身份验证,所有未经身份验证的用户都将被重定向到登录页面,然后获得基本身份验证。由于路由页面请求需要公开,我只是将其作为例外添加到 Web.config。路由值必须满足非常严格的标准才能被页面逻辑执行,并且处理程序将其他所有内容作为 404 返回。

    显然,这意味着当请求被重定向到登录页面时,asp.net dll 在 IIS 基本安全之前执行,但在这种情况下我认为这很好。

    【讨论】: