Избегайте всплывающего окна http auth в расширении chrome (digest)

в настоящее время я разрабатываю расширение chrome, мне нужно получить доступ к некоторым защищенным ресурсам http-auth (webdav). Аутентификация HTTP использует (в лучшем случае) дайджест-аутентификацию.

Я могу сделать auth непосредственно в запросе ajax, используя https://login:password@domain.tld/path/to / ressource форма.

проблема в том, что если логин / пароль неправильный, я не могу просто получить статус 401 (несанкционированный), Chrome всплывает обычная аутентификация диалог. Что я не хочу, потому что это запутывает пользователя, и я не могу сохранить учетные данные отсюда.

EDIT: другой вариант использования, с которым я столкнулся : я хочу проверить, защищен ли ресурс паролем, не пытаясь предоставить учетные данные для фактического доступа к нему.

есть идеи о том, как поймать 401 без всплывающего окна аутентификации Chrome ?

3 ответов


команды Google Chrome внедрили событие onAuthRequired в Google Chrome 22, поэтому теперь можно определить, когда требуется базовая аутентификация HTTP.

фактически я написал расширение, которое автоматически отправляет учетные данные аутентификации HTTP Basic с помощью события onAuthRequired.

Он доступен бесплатно в официальном Google Chrome web магазин: https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn

пример использования события onAuthRequired:

sendCredentials = function(status)
{   
    console.log(status);
    return {username: "foo", password: "bar"};
}

chrome.webRequest.onAuthRequired.addListener(sendCredentials, {urls: ["<all_urls>"]}, ["blocking"]);

вам нужно добавить правильные разрешения в файл манифеста, чтобы использовать onAuthRequired.

"permissions": [ "http://*/*", "https://*/*", "webRequest", "webRequestBlocking", "tabs" ],

скачать расширения и проверьте исходный код для лучшего подхода.

Он должен работать даже если запрос был инициирован из другого расширение.


Это действительно кажется недостатком в поведении chrome, другие люди хотят видеть что-то как mozBakgroundRequest Крис подчеркнул, там уже a отчет об ошибке для этого.

есть (хакерские) обходные пути, предложенные некоторыми разработчиками в bugtracker:

  • используйте webworker и тайм-аут для выполнения запроса
  • сделайте то же самое с фоновой страницей

в обоих случаях преимущество в том, что он не будет открывать окно аутентификации... Но вы никогда не узнаете, является ли это реальным таймаутом сервера или 401. (Я не тестировал эти обходные пути).


Я думаю, что это невозможно. Если вы используете http-клиент браузера, он запросит у пользователя учетные данные на 401.

EDIT: в mozilla land https://developer.mozilla.org/en/XMLHttpRequest Проверьте "mozBackgroundRequest".