在使用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的方法AuthenticateIdentity.IsAuthenticated返回false,方法结束并全部完成。 即使是来自BaseControllerOnAuthorization方法也不会被调用,所以我无法将任何状态传递给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

下一篇: Update whole page on Ajax request