Избегайте всплывающего окна 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".