2

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

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

+1

Дубликат [Как выйти из интернет-сайта с использованием аутентификации BASIC?] (Http://stackoverflow.com/questions/233507). Было бы неплохо объединить информацию в одном месте. –

ответ

2

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

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

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

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

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

[Ugh. Это боль. Неудивительно, что каждый использует файлы cookie вместо этого ...]

+0

Спасибо! Вариант JavaScript будет работать для меня. – Dhaval

+0

@bobince, не могли бы вы объяснить JavaScript-решение немного больше. Он не работает для меня – Marco

+0

В каком формате мне нужно обратиться к приложению (/ app)? – Marco

Смежные вопросы