Как передать учетные данные пользователя в Chrome через Native Messaging API

Это довольно специфическая проблема... но если вы используете Selenium и т. Д. С компьютера, который не является частью Active Directory, и вас не защищают всплывающие окна браузера, у меня есть решение для вас.

Я объясню проблему и ссылку на некоторые ресурсы (и другие мои вопросы, с еще большим количеством ссылок в них), которые сообщали о решении, затем я опубликую внесенное мной изменение в примере для расширения, которое я "написал".


Проблема:

Вы автоматизируете или тестируете с помощью селена или чего-то подобного... и всплывающее окно аутентификации появляется на ровном месте! Но это всплывающее окно не JavaScript, и вам не нужно сохранять учетные данные на компьютере, с которого вы тестируете.

Как вы передаете учетные данные аутентификации в браузер и предотвращаете появление этого всплывающего окна... но без использования хранилищ ключей, хранилища браузера или, ghasp, файла?

Как только вы знаете, как передавать эти данные, как вы можете получить значения в браузере таким образом, чтобы разрешить аутентификацию в режиме громкой связи?

1 ответ

Решение:

Вам нужно будет использовать расширение браузера. Мое решение было разработано для хрома, но оно должно быть почти неизменным для Firefox и, возможно, для края.

Прежде всего, вам нужно 2 API для вашего браузера:

Хотя оба API-интерфейса браузера очень похожи, они имеют некоторые существенные различия - например, в реализации Chrome отсутствует Promises.

Если вы настроили свой собственный узел обмена сообщениями для отправки правильно сформированной строки JSON, вам нужно будет опросить ее только один раз. Это означает, что вы можете использовать один вызов runtime.sendNativeMessage() и будьте уверены, что ваши учетные данные являются приемлемыми. Пун намеревался.

Далее нам нужно посмотреть, как мы должны справиться с webRequest.onAuthRequired событие.

Поскольку я работаю в Chromium, мне нужно использовать Chrome API без обещаний.

chrome.webRequest.onAuthRequired.addListener(
  callbackFunctionHere,
  {urls:[targetUrls]},
  ['asyncBlocking'] // --> this line is important, too. Very.

Изменение:

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

Пример кода выбирает учетные данные из storage.local...

chrome.storage.local.get(null, gotCredentials);

Мы этого не хотим. Нету.

Мы хотим получить учетные данные от одного звонка sendNativeMessage поэтому мы изменим эту строку.

chrome.runtime.sendNativeMessage(hostName, { text: "Ready" }, gotCredentials);

Это все, что нужно. Шутки в сторону. Пока ваш Хозяин играет хорошо, это большой секрет. Я даже не скажу вам, сколько времени мне понадобилось, чтобы найти его!

Ссылки:

Мои вопросы с полезными ссылками:

  • Здесь - Обходной путь для аутентификации против Active Directory
  • Здесь - также есть некоторый рабочий код для функционального хоста NM
  • Здесь - некоторые поучительные материалы по обещаниям
Другие вопросы по тегам