В одном приложении, настроенном с помощью FormsAuthentication, когда пользователь получает доступ к файлу auth или с устаревшим на защищенную страницу, ASP.NET выдает HTTP 401 Unauthorized, тогда модуль FormsAuthentication перехватывает этот ответ до конца запроса и измените его для HTTP 302 Found, установив HTTP-заголовок "Location:/path/loginurl", чтобы перенаправить пользовательский агент на страницу входа в систему, затем браузер переходит на эту страницу и извлекает страницу входа, которая не защищена, получение HTTP 200 OK.
Это была очень хорошая идея, когда AJAX не рассматривался.
Теперь у меня есть url в моем приложении, которое возвращает данные JSON, и ему нужно, чтобы пользователь был аутентифицирован. Все работает хорошо, проблемы состоят в том, что, если истекает срок действия файла cookie auth, когда мой клиентский код вызывает сервер, он получит HTTP 200 OK с html страницы входа, а HTTP 401 Unauthorized (потому что объяснено ранее). Затем моя клиентская сторона пытается проанализировать страницу html входа в систему как json и не удается.
Возникает вопрос: как справиться с истекшей аутентификацией с клиентской стороны? Какое самое элегантное решение для решения этой ситуации? Мне нужно знать, когда вызов был успешным или нет, и я хотел бы сделать это, используя семантику HTTP.
Можно ли читать пользовательские заголовки HTTP с клиентской стороны в безопасном кросс-браузере? Есть ли способ сообщить FormsAuthenticationModule не выполнять перенаправления, если запрос является запросом AJAX? Есть ли способ переопределить статус HTTP с помощью HTTP-заголовка так же, как вы можете переопределить метод HTTP-запроса?
Мне нужна аутентификация Forms, и я бы хотел избежать перезаписи этого модуля или написать свой собственный модуль аутентификации формы.
С уважением.