Как мне запретить Firefox запрашивать имя пользователя / пароль с помощью HTTP Basic Auth с помощью jQuery AJAX?
-
06-09-2019 - |
Вопрос
Я пишу некоторые динамические функции на стороне браузера и использую HTTP Basic Auth для защиты некоторых ресурсов.Пользовательский опыт очень важен и в высшей степени индивидуализирован.
Вот простой тестовый метод jQuery, который в конечном итоге проверит, предоставил ли пользователь правильные учетные данные в форме:
$(document).ready(function() {
$("#submit").click(function() {
var token = Base64.encode($('#username').val() + ':' + $('#password').val());
$.ajax({
url: '/private',
method: 'GET',
async: false,
beforeSend: function(req) {
req.setRequestHeader('Authorization', 'test:password');
},
error: function(request, textStatus, error) {
if (request.status == 401) {
alert('401');
}
}
});
return false;
});
});
Если им не разрешен доступ /private
, на данный момент они должны видеть только окно предупреждения.Однако в Firefox появляется форма входа в систему, предоставляемая браузером (для повторной попытки с новыми учетными данными).Safari этого не делает.
Мы хотим полностью контролировать работу с пользовательскими формами, затуханиями, переходами и т.д.Как я могу запретить отображение поля Firefox по умолчанию?(Если это будет проблемой при тестировании для IE, я бы тоже хотел услышать решения там.)
Решение
На случай, если вы этого еще не читали:
Как я могу отключить диалоговое окно аутентификации браузера?
Выглядит не слишком многообещающе :)
Другие советы
Решение состоит в том, чтобы установить WWW-Authenticate
заголовок к чему-то другому, чем Basic
.Например, установите для него значение:
WWW-Authenticate: None
или
WWW-Authenticate: FormBased
если вы используете логин на основе формы.Тогда браузер не покажет вам окно входа в систему.
К сожалению, здесь я сталкиваюсь с той же проблемой.
На мой взгляд, браузеры не должны выдавать запрос на xmlhttprequest.Я действительно хотел бы, чтобы кто-нибудь настаивал на этом, потому что люди действительно хотят перейти на jQuery для своих нужд аутентификации.
Что ж, вот помощь, которую я могу вам оказать, я нашел эту штуку с jQuery Digest, я понятия не имею, что она на самом деле делает или что-то в этом роде, но если бы кто-нибудь мог правильно использовать этот код, у нас могла бы быть система аутентификации jquery digest.
https://www.openhub.net/p/digestj
Я бы подумал, что с помощью этой удобной новой опции AuthDigestDomain мы могли бы переписать приведенный выше скрипт или что-то еще и "связать" защищенную область вместе, и мы могли бы решить эту проблему раз и навсегда.Что ж...желаю удачи =)
Я где-то нашел обходной путь этой всплывающей проблемы с аутентификацией.
WWW-Authenticate: None
у меня это не работает, но я добавил
'Authorization': 'Basic'
к заголовкам, и это работает как по волшебству.