Как запретить браузеру вызывать всплывающее окно авторизации Digest и обрабатывать ошибку 401 с помощью Jquery?

Мне нужно отправить запрос на авторизацию, используя дайджест-аутентификацию. Я успешно реализовал это с помощью jquery. Однако, когда я получаю ошибку 401, дайджест аутентификации всплывающее окно браузера открывается, а обратный вызов ошибки jquery ajax не вызывается.


person Zzb    schedule 20.06.2019    source источник
comment
Не могли бы вы предоставить более подробную информацию о том, как вы реализовали то, что описываете? Не могли бы вы добавить образец?   -  person rudolf_franek    schedule 20.06.2019
comment
Вам удалось решить эту проблему?   -  person ndh    schedule 17.08.2020


Ответы (2)


Измените ответ сервера, чтобы он не возвращал 401. Вместо этого верните код 200 и обработайте его в своем клиенте jQuery. Измените метод, который вы используете для авторизации, на пользовательское значение в заголовке. Браузеры отобразят всплывающее окно для Basic и Digest. Вы должны изменить это как на клиенте, так и на сервере.

headers : {
  "Authorization" : "BasicCustom"
}

Посмотрите здесь: Используйте базовую аутентификацию с помощью jQuery и Ajax

person Umbro    schedule 20.06.2019
comment
Раньше я использовал обычную аутентификацию, но для большей безопасности мне пришлось использовать дайджест-аутентификацию. И я также использую тег в заголовке запроса, чтобы позволить серверу вернуть код 200 http и responseCode 401 в ответе вместо кода 401 http. И тогда клиент может делать другие вещи, чтобы отправить правильную авторизацию. Для этого вопроса я просто хочу знать, использую ли я дайджест-аутентификацию, как я могу предотвратить всплывающее окно браузера. - person Zzb; 20.06.2019

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

К сожалению, это невозможно. Для всех событий запросов Ajax (loadstart, load, loadend, progress, error, abort, timeout) обработчик и обработчик событий onreadystatechange только loadstart запускается до всплывающего окна браузера для дайджеста (на самом деле он запускается еще до того, как сервер извлекает запрос).

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

person shaochuancs    schedule 20.06.2019