Как выйти из системы для базовой аутентификации HTTP - PullRequest
2 голосов
/ 11 ноября 2010

Есть ли решение для выхода пользователя из системы (сделать так, чтобы браузер очистил его кэшированные учетные данные и еще раз попросить пользователя войти в систему) для базовой HTTP-аутентификации?

Я уже просмотрел следующие вопросы:

Ответы [ 2 ]

4 голосов
/ 15 января 2013

Решение, предложенное в ответе на другой вопрос , заключается в том, чтобы указать ссылку выхода из системы на URL-адрес, содержащий поддельные учетные данные, например http://log -me-out: fake-pwd@example.com/ выход из системы

2 голосов
/ 11 ноября 2010

Да, но это не очень гладко.

У вас есть специальный URL-адрес сценария (например, /logout; как и сценарий входа в систему, он должен находиться в корне веб-приложения, чтобы гарантировать, что аутентификация будет установлена ​​направильный путь), который вместо того, чтобы требовать действительное имя пользователя / пароль, требует неверного.

Таким образом, вошедший в систему пользователь нажимает /logout, отправляя действительные учетные данные в заголовке Authorization.Ваш скрипт отвечает 401, и в браузере появляется запрос на ввод имени пользователя / пароля.Вы говорите пользователю ввести ложные значения (или, в большинстве браузеров, просто оставьте поле пустым, тоже ОК) и нажимаете ОК.Это заменяет действительные сохраненные учетные данные недействительными.Затем ваш сценарий возвращает страницу «вышли из системы» или перенаправление на домашнюю страницу, и пользователь больше не входит в систему.

(Внимание: Safari, к сожалению, сначала передает каждый HTTP-запрос без каких-либо учетных данных,только повторная попытка с сохраненными учетными данными, если он получает ответ 401. Это означает, что вы не должны принимать запрос без заголовка Authorization как нормально для сценария выхода из системы, он должен присутствовать, даже если с пустыми учетными данными в немЭто неудачное поведение также означает, что вы не можете предоставить зарегистрированной и незарегистрированной версии одной и той же страницы пользователям Safari по одному и тому же URL, и это замедляет просмотр Safari сайтов, защищенных Basic, так как каждый запрос страницыдолжно произойти дважды.)

Есть и другой способ, который иногда используется: используйте JavaScript для отправки XMLHttpRequest с фальшивой комбинацией имени пользователя и пароля (например, xhr.open('GET', '/app', true, '_', '_')).У этого есть нестандартный побочный эффект замены сохраненных учетных данных в IE и Firefox (но не в Opera; не уверен насчет других).

[Тьфу.Это боль.Неудивительно, что вместо этого все используют куки ...]

...