В моем проекте я использую WIF (но это не очень важно для контекста этого вопроса. Вы можете использовать альтернативную структуру, которая обрабатывает вашу аутентификацию. Вопрос в том, чтобы справляться с ошибками аутентификации при выполнении запросов ajax). Тем не менее, в моем случае я написал пользовательскую логику сервера, которая наследует от ClaimsAuthenticationManager и обрабатывает аутентификацию:
public override IClaimsPrincipal Authenticate(string resourceName, IClaimsPrincipal incomingPrincipal)
{
    if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated)
    {
        // add some custom claims
    }
    return incomingPrincipal;
}
Теперь, после того как я удалю все Cookies сеанса, закончите, затем снова введите любую страницу, я перенаправлен на страницу входа в систему, обслуживаемую WIF, и мне будет предложено снова зарегистрироваться. Все работает так, как ожидалось.
Но если я сделаю запрос ajax, у меня есть ошибка, которая перехвачена этим:
$(document).ready(function () {
    $.ajaxSetup({
        error: function (XMLHttpRequest, textStatus, errorThrown) {            
            // do something
        }
    });
});
К сожалению, объект XMLHttpRequest не возвращает никакого значимого сообщения, на основе которого я мог бы обрабатывать такую ошибку любым другим способом, как другие. В этом конкретном случае я просто хочу, чтобы приложение перенаправлялось на страницу входа - как это делает обычный запрос.
 
Пока выполняется вызов ajax, вызывается метод Authenticate from ClaimsAuthenticationManager. Identity.IsAuthenticated возвращает false, конец метода и все делается. Даже метод OnAuthorization из BaseController не вызывается, поэтому я не могу передать какой-либо статус объекту результата 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);
}
Как решить головоломку?
