HTTP 401-что такое соответствующее значение заголовка WWW-Authenticate?


приложение, над которым я работаю в данный момент, имеет значение таймаута сеанса. Если пользователь не взаимодействовал дольше, чем это значение, на следующей странице, которую он пытается загрузить, ему будет предложено войти в систему.

все запросы направляются через этот механизм, который включает вызовы AJAX. Первоначально мы отправляли заголовок 200 со страницей входа, который вводит некоторые проблемы с AJAX, так как код запускается, если отправляется ответ 200, и большинство данных отправляются обратно из этих вызовов RPC является ли JSON или raw JavaScript, который оценивается (не спрашивайте :/).

я предположил, что 401 лучше, так как наш парсер JSON не будет пытаться использовать страницу входа в HTML.. :)

, когда чтение спецификаций, однако, я заметил, что WWW-Authenticate поле также должно быть отправлено.

что является хорошим значением для этого поля? Будет Application Login достаточно?

3 94

3 ответа:

при указании http Basic Authentication мы возвращаем что-то вроде:

WWW-Authenticate: Basic realm="myRealm"

, тогда как Basic - Это схема, а остаток очень сильно зависит от этой схемы. В этом случае realm просто предоставляет браузеру литерал, который может отображаться пользователю при запросе идентификатора пользователя и пароля.

вы, очевидно, не используете Basic, однако, поскольку нет смысла иметь истечение сеанса, когда используется Basic Auth. Я предполагаю, что вы используете некоторые формы проверка подлинности на основе.

из воспоминаний ответ на вызов Windows использует другую схему и другие аргументы.

фишка в том, что это зависит от браузера, чтобы определить, какие схемы он поддерживает и как он реагирует на них.

моя интуиция, если вы используете аутентификацию на основе форм, должна оставаться на странице 200 + relogin, но добавить пользовательский заголовок, который браузер будет игнорировать, но ваш AJAX может идентифицировать.

для действительно хорошего пользователя + AJAX опыт, получить скрипт, чтобы повесить на AJAX-запрос, который нашел сеанс истек, запустить запрос relogin через всплывающее окно, и на успех, повторно отправить исходный запрос AJAX и продолжить как обычно.

избегайте обмана, который просто получает скрипт, чтобы попасть на сайт каждые 5 минут, чтобы сохранить сеанс живой причиной, которая просто побеждает точку истечения срока действия сеанса.

другая альтернатива-записать запрос AJAX, но это плохой пользовательский интерфейс.

нет, вам нужно будет указать метод аутентификации для использования (обычно "базовый") и область аутентификации. См.http://en.wikipedia.org/wiki/Basic_access_authentication для примера запроса и ответа.

вы также можете прочитать RFC 2617 - HTTP аутентификация: базовая и дайджест-аутентификация доступа.

когда время сеанса пользователя истекает, я отправляю обратно код состояния HTTP 204. Обратите внимание, что состояние HTTP 204 не содержит содержимого. На стороне клиента я делаю так:

xhr.send(null);
if (xhr.status == 204) 
    Reload();
else 
    dropdown.innerHTML = xhr.responseText;

вот функция Reload ():

function Reload() {
    var oForm = document.createElement("form");
    document.body.appendChild(oForm);
    oForm.submit();
    }