在MVC窗体身份验证中处理未经身份验证的ajax请求

本文关键字:身份验证 ajax 请求 处理 MVC 窗体 | 更新日期: 2023-09-27 17:57:44

我有一个带有Forms Authentication的MVC 4.0网站,正在尝试处理Authentication超时。具体来说,我需要在超时后以不同于常规请求的方式处理ajax请求,因为如果留给MVC自己的设备,MVC的Forms Authentication系统将向登录页面发送302 FoundRedirect),作为对ajax请求的响应。。。这以ajax调用接收200 Success HttpStatusCode结束,而这显然不是我想要发送的!

如何处理未经身份验证的ajax请求?

当然,扩展AuthorizeAttribute并不是解决问题的办法,因为只有在身份验证之后才能进行授权。在这种情况下永远不会调用HandleUnauthorizedRequest(与问题中的不同答案相反)
我可以拦截global.asax中的每个请求并在那里进行检查。。。但这似乎是错误的做法。

我的web.config中的授权设置如下:

<authentication mode="Forms">
  <forms loginUrl="Login"
         protection="All"
         timeout="60"
         name=".ASPXAUTH"
         path="/"
         requireSSL="false"
         slidingExpiration="true"
         defaultUrl="Main"
         cookieless="UseDeviceProfile"
         enableCrossAppRedirects="false" />
</authentication>
<authorization>
  <deny users="?" />
</authorization>
<sessionState mode="InProc" timeout="60"></sessionState>

在MVC窗体身份验证中处理未经身份验证的ajax请求

因此,我最终所做的是允许web.config中的所有用户:

<authorization>
    <allow users="*" />
</authorization>

然后在我自己的代码中检查用户是否通过了身份验证
但肯定有更好的方法,不是吗?