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