Как заставить Firefox запрашивать имя пользователя/пароль с помощью HTTP Basic Auth с помощью JQuery AJAX?

Я пишу некоторые динамические функции на стороне браузера и используя 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, я также хотел бы услышать решения там.)

Ответ 2

Решение состоит в том, чтобы установить заголовок WWW-Authenticate на нечто, отличное от Basic. Например, установите для этого значение:

WWW-Authenticate: None

или

WWW-Authenticate: FormBased

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

Ответ 3

К несчастью, я делаю то же самое и здесь.

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

Ну вот помощь, которую я могу вам дать, я нашел эту вещь jQuery Digest, я понятия не имею, что она на самом деле делает или что-то в этом роде, но если кто-то может правильно использовать этот код, мы могли бы получить систему авторизации jquery digest.

https://www.openhub.net/p/digestj

Я бы подумал, что с этой удобной новой опцией AuthDigestDomain мы могли бы переписать выше script или что-то еще и связать защищенную область вместе, и мы могли бы преодолеть эту проблему раз и навсегда. Ну... из удачи =)

Ответ 4

Я нашел где-то обходной путь к этой проблеме всплывающего окна аутентификации.

WWW-Authenticate: None

не работает для меня, но я добавил

'Authorization': 'Basic'

к заголовкам, и это работает как шарм.