我有一个网络应用程序,并且一些使用Chrome作为首选浏览器的用户在退出应用程序时会收到以下错误,并尝试重新登录。
“此网页有重定向循环”。
我的网络应用程序使用表单身份验证,FormAuthenticationModule
将用户重定向回我的应用程序的“登录”页面,因此我无法使用此方法:
<customErrors mode="On" defaultRedirect="~/MyErrorPage.aspx" >
<error statusCode="401" redirect="~/NoAccess.aspx"/>
</customErrors>
相反,我已将以下内容添加到Page_Load
的{{1}}事件中。
LoginPage
但是,由于我添加了这种方法,用户似乎得到了“重定向循环”错误。
清除cookie后,一切似乎都很好,但问题确实再次发生。
我可以添加到我的代码中是否有永久性修复,或者我还能做些什么来防止此问题发生?
答案 0 :(得分: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>
答案 1 :(得分:2)
有一个非常类似的问题并在IIS中解决了:在Authentication
功能启用Anonymous Authentication
并禁用其他所有内容。这是有道理的,因为最终这是管理身份验证逻辑而不是IIS或ASP.NET的应用程序。但很明显,这个解决方案并不像@Grzegorz所建议的那样支持对公共页面的优雅访问。
答案 2 :(得分:1)
我还有一个重定向循环,导致Visual Studio 2013网站的错误消息The request filtering module is configured to deny a request where the query string is too long.
,其中身份验证设置为个人用户帐户。
请求的网址是http://localhost:52266/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl....
的长版本,因此显然会不断重定向到登录页面并每次都附加返回网址。
尝试查找有问题的循环时没有任何断点似乎有所作为,因为没有一个被触发。
Anonymous Authentication
设为Enabled
。Windows Authentication
设为Disabled
。启动项目时,现在应该显示默认页面,并且您添加的断点应该开始工作。
答案 3 :(得分: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>
希望它有所帮助。