Избегайте всплывающих окон HTTP в хромовом расширении (дайджест)
В настоящее время я разрабатываю расширение chrome, мне нужно получить доступ к некоторым защищенным ресурсам http-auth (webdav). HTTP auth использует (в лучшем случае) аутентификацию дайджеста.
Я могу выполнить auth непосредственно в запросе ajax, используя форму https://login:[email protected]/path/to/ressource.
Проблема в том, что если логин/пароль неверны, я не могу просто получить статус 401 (неавторизованный), Chrome открывает обычное диалоговое окно проверки подлинности. Я не хочу, чтобы это сбивало с толку для пользователя, и я не могу сохранить учетные данные здесь.
EDIT: Другой случай использования, с которым я столкнулся, заключается в следующем: я хочу проверить, защищен ли ресурс, не пытаясь предоставить учетные данные для фактического доступа к нему.
Любые идеи о том, как поймать 401, не вставляя окно авторизации Chrome?
Ответы
Ответ 1
Команды Google Chrome внедрили событие onAuthRequired в Google Chrome 22, поэтому теперь можно обнаружить, когда требуется базовая аутентификация HTTP.
Фактически я написал расширение, которое автоматически отправляет учетные данные базовой аутентификации HTTP, используя событие onAuthRequired.
Он доступен бесплатно в официальном интернет-магазине Google Chrome:
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" ],
Загрузите расширения и проверьте исходный код для лучшего подхода.
Он должен работать, даже если запрос был инициирован с другого расширения.
Ответ 2
Кажется, что это недостаток в поведении хром, другие люди хотят увидеть что-то, как подсвечивается mozBakgroundRequest Chris, там уже есть отчет об ошибке для.
Есть некоторые (хакерские) обходные пути, предложенные некоторыми разработчиками в bugtracker:
- используйте веб-исполнителя и тайм-аут для выполнения запроса
- сделать то же самое со справочной страницей
В обоих случаях преимущество заключается в том, что он не будет появляться в окне проверки подлинности... Но вы никогда не узнаете, является ли это реальным тайм-аутом сервера или 401. (Я не проверял эти обходные пути).
Ответ 3
Я думаю, что это невозможно. Если вы используете http-клиент браузера, он будет запрашивать у пользователя учетные данные на 401.
РЕДАКТИРОВАТЬ: Сверху в mozilla land https://developer.mozilla.org/en/XMLHttpRequest проверить "mozBackgroundRequest".