在使用WIF和jQuery ajax请求时ASP.NET MVC 3中的会话Cookie过期处理
我的项目我使用WIF(但这对于这个问题的上下文并不重要,你可以使用替代框架来处理你的认证,问题是关于在执行Ajax请求时处理认证失败)。 不过,就我而言,我编写了自定义的服务器逻辑,它继承自ClaimsAuthenticationManager
并处理身份验证:
public override IClaimsPrincipal Authenticate(string resourceName, IClaimsPrincipal incomingPrincipal)
{
if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated)
{
// add some custom claims
}
return incomingPrincipal;
}
现在,在删除所有会话Cookie后 ,结束然后再次输入任何页面,我被重定向到WIF提供的登录页面,并且我被要求再次登录。 一切都按预期工作。
但是,如果我发出一个ajax请求 ,我得到一个错误,它被这个截获:
$(document).ready(function () {
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown) {
// do something
}
});
});
不幸的是, XMLHttpRequest
对象不会返回任何有意义的消息,基于此我可以用任何其他方式处理这种错误。 在这种特殊情况下,我只想让应用程序重定向到登录页面 - 正常请求所做的一样。
当ajax调用正在执行时,将调用ClaimsAuthenticationManager
的方法Authenticate
。 Identity.IsAuthenticated
返回false,方法结束并全部完成。 即使是来自BaseController
的OnAuthorization
方法也不会被调用,所以我无法将任何状态传递给ajax结果对象。
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest() && !User.Identity.IsAuthenticated)
{
//do something, for example pass custom result to filterContext
}
base.OnAuthorization(filterContext);
}
如何解决这个难题?
链接地址: http://www.djcxy.com/p/1961.html
上一篇: Session Cookies expiration handling in ASP.NET MVC 3 while using WIF and jquery ajax requests