6

我试图在我的 web.config 中放入一个异常,以便一页不需要身份验证。但是,它仍然会重定向到登录页面。

问题不在于如何设置 web.config。为什么?我们的系统(无论好坏)除了 web.config 之外还有一堆工具。我们有 global.asax 和自定义 HttpHandlers。代码库并不庞大,但重定向的潜在原因很多。

我想知道的是如何最好地确定重定向的原因。有什么方法可以找出触发重定向的代码吗?

4

6 回答 6

4

如果您可以调试应用程序,则从global.asax中的HttpApplication.BeginRequest开始并逐步浏览 System.Web 的参考源将是蛮力方式。

或者,在 HttpResponse.Redirect(string, bool) 上设置断点并遵循调用堆栈 - 我怀疑运行时是否有任何其他方式用于重定向请求。

如果这没有解决任何问题(或者您无法调试),并且由于蛮力方法可能会导致大量代码 - 而且您的问题似乎与安全相关 - 您可能只是挂钩 HttpApplication。AuthenticateRequest 和 HttpApplication。AuthorizeRequest,(及其相关的 Post* 事件)并查看那里的情况。

如果您使用的是表单身份验证,我碰巧知道 FormsAuthenticationModule 在 HttpApplication.EndRequest 查找状态代码 401 来决定是否重定向请求。设置 401(拒绝访问)的任何内容都将导致重定向 - 而不是 401 返回到浏览器。

于 2008-11-18T19:39:45.213 回答
1

当向需要身份验证的 asp.net 页面发出请求时,asp.net 会重定向到指定的登录页面,并默认提供一个 ReturnUrl 查询字符串参数来标识原始请求的页面。虽然此 ReturnUrl 是可配置的,但如果您没有修改配置,它的存在应该表明身份验证失败。

在这种情况下,您应该专注于对页面的身份验证设置进行故障排除。戈登贝尔的回答看起来不错。

<system.web>
...
</system.web>

<location path="NoAuthNeeded.aspx">
    <system.web>
        <authorization>
        <allow roles="*" />
        <allow roles="?" />
        </authorization>
    </system.web>
</location>
于 2008-11-18T19:15:57.290 回答
1

此外,如果这仅发生在您的生产应用程序中,您可能能够使用 WinDBG 找出发生了什么。松散地遵循本文,您将执行以下操作:

  • 启动 WinDBG 并附加到 w3wp 进程
  • WinDBG 将断点,因此.loadby sos mscorwks会加载 SOS 模块
  • 在 CLR 异常上键入sxe clr断点
  • 输入g继续

现在您的应用程序将因任何异常而中断。由于 Response.Redirect 通常会引发 ThreadAbortException,因此它可能是一种简单的中断方法。然后执行 a!printexception以获取堆栈跟踪。~*e!clrstack如果我的 WinDBG foo 没有让我看到当前正在执行的所有线程的托管堆栈,您也可以这样做。

请注意,您在闯入时冻结了 w3wp 进程,所以要快!

希望您可以改用另一种方法,但如果所有其他方法都失败了,这可能会帮助您入门。

于 2008-11-18T19:49:15.053 回答
0

您是否尝试过打开跟踪?这可能会有所帮助。

您如何指定页面不需要身份验证,例如:

<system.web>
...
</system.web>

<location path="NoAuthNeeded.aspx">
    <system.web>
        <authorization>
        <allow roles="*" />
        <allow roles="?" />
        </authorization>
    </system.web>
</location>
于 2008-11-18T18:43:47.883 回答
0

在每个 HTTP 处理程序的开头放置一个断点,并注意哪个是在重定向发生之前最后调用的处理程序。您可能会在其中找到问题的原因。

于 2008-11-18T19:36:26.453 回答
0

您可以使用以下方法在您自己的代码中查找重定向:

打开异常设置窗口并搜索“threadabort”。选中 ThreadAbortException 的复选框。现在,当从代码执行重定向时,您的调试会话将进入中断模式。

异常设置

但是由于您正在谈论 web.config 中的身份验证,因此问题很可能存在,而不是代码中。

仔细检查HectorMac 的答案authorization中提到的所有元素是否正确。

于 2021-06-21T10:45:58.437 回答