5

我有一个 Web 应用程序,一些使用 Chrome 作为首选浏览器的用户在退出应用程序并尝试重新登录时收到以下错误。

“此网页有重定向循环”。

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

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

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

</customErrors>

相反,我将以下内容添加到Page_Load我的LoginPage.

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

但是,由于我添加了这种方法,用户似乎得到了“重定向循环”错误。

清除 cookie 后一切正常,但问题再次出现。

我可以将其添加到我的代码中,或者我可以做些什么来防止这个问题发生?

4

4 回答 4

7

尝试将此添加到您的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>

您可以在此处阅读有关位置的更多信息。还有更多关于授权的信息

于 2013-04-09T06:23:44.697 回答
2

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

于 2014-05-11T09:58:00.903 回答
1

我还有一个重定向循环,导致The request filtering module is configured to deny a request where the query string is too long.Visual Studio 2013 网站出现错误消息,其中身份验证设置为个人用户帐户。

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

试图找到有问题的循环的任何断点似乎都没有影响,因为没有一个被触发。

最后我做了以下事情

  • 找到项目属性。通过选择项目(不是解决方案)并查看“属性”窗口来执行此操作(不要右键单击然后选择“属性”,否则您将找不到它)。
  • 设置Anonymous AuthenticationEnabled
  • 设置Windows AuthenticationDisabled

启动项目时,默认页面现在应该出现,并且您添加的断点应该开始工作。

于 2015-02-25T17:07:02.463 回答
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> 

希望能帮助到你。

于 2018-04-03T10:37:39.060 回答