如何解决重定向循环问题

6

我有一个web应用程序,使用Chrome作为首选浏览器的某些用户在注销应用程序并尝试重新登录时会出现以下错误:

"此网页具有重定向循环"。

我的Web应用程序使用表单身份验证,并且FormAuthenticationModule将用户重定向回我的应用程序的登录页面,因此我不能使用这种方法:

<customErrors mode="On" defaultRedirect="~/MyErrorPage.aspx" >

    <error statusCode="401" redirect="~/NoAccess.aspx"/>

</customErrors>

相反,我已经在LoginPagePage_Load事件中添加了以下内容。

if (Request.IsAuthenticated && !string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
{
    Response.Redirect("~/NoAccess.aspx");
}

然而,自从我采用这种方法,用户似乎会遇到“重定向循环”错误。

清理了 cookie 后,一切看起来都很好,但问题确实会再次发生。

是否有永久解决此问题的代码,或者还有其他方法可以防止出现此问题?

4个回答

8
尝试将以下内容添加到您的web.config文件中:
  <location path="NoAccess.aspx">
    <system.web>
      <authorization>
        <allow users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

这将关闭此页面的任何授权并应停止您的循环。

您还可以添加以下内容:

  <location path="Login.aspx">
    <system.web>
      <authorization>
        <deny users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

这将拒绝已通过身份验证的所有用户访问您的登录页面。将这两者结合起来,应该可以为所有重定向添加自定义错误。
您还可以考虑创建一个未经授权访问的目录(例如public/),并在其中放置所有不需要授权的错误页面。然后您可以执行以下操作:
  <location path="public">
    <system.web>
      <authorization>
        <allow users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

您可以在这里了解更多关于位置的信息。 同时,您也可以在这里了解更多关于授权的内容。


2

我曾经遇到一个类似的问题并在IIS中解决了它: 在 Authentication 功能中启用 Anonymous Authentication 并禁用其他所有功能。这很有道理,因为最终是应用程序管理身份验证逻辑而不是IIS或ASP.NET。但显然,这个解决方案不支持像 @Grzegorz 建议的优雅访问公共页面。


1
我还遇到了重定向循环,结果出现错误信息The request filtering module is configured to deny a request where the query string is too long.,这是在设置为单独用户帐户的Visual Studio 2013 Web Site中发生的。

请求的URL是http://localhost:52266/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl....的长版,因此它显然一直在不断地重定向到登陆页面并每次附加返回URL。

尝试设置断点以找到有问题的循环,但无济于事,因为没有任何断点被触发。

最终我执行了以下操作:

  • 查找项目属性。通过选择项目(而不是解决方案)并查看属性窗口来完成此操作(不要右键单击然后选择属性,否则您将找不到它)。
  • 匿名身份验证设置为启用
  • Windows身份验证设置为禁用
在启动项目时,默认页面现在应该出现,并且您添加的断点应该开始工作。

我最近也开始使用MVC 5,如果我碰到这个问题,会记住你的解决方案。 - user1269016

0

这是一篇旧帖子,我在自定义身份验证和验证时遇到了这个问题。通过在web.config中添加这行代码,问题得到了解决。

<system.web>
<authentication mode="Forms">
  <forms name=".ASPXFORMSAUTH" path="/" timeout="240" cookieless="UseCookies"></forms>
</authentication>
<authorization>
  <allow users="*"/>
</authorization>
    <compilation debug="true" targetFramework="4.6" />
    <httpRuntime targetFramework="4.6" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web> 

希望能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接