Скрипт GreaseMonkey для автоматического входа в систему с использованием HTTP-аутентификации

StackOverflow https://stackoverflow.com/questions/49158

Вопрос

У меня есть довольно много скриптов GreaseMonkey, которые я написал на работе, которые автоматически регистрируют меня на внутренних сайтах, которые у нас есть.Мне удалось написать сценарий почти для каждого из этих сайтов, за исключением нашего приложения учета рабочего времени, которое использует аутентификацию HTTP.

Есть ли способ использовать GreaseMonkey для автоматического входа на этот сайт?

Редактировать:Я знаю о функции пароля хранилища в браузерах, но мои сценарии идут еще дальше, проверяя, вошел ли я на сайт при его загрузке (путем обхода HTML), а затем отправляя сообщение на страницу входа.Это устраняет необходимость загрузки сайта, входа на страницу входа, ввода моих учетных данных и последующего нажатия кнопки «Отправить».

Это было полезно?

Решение

Можно войти в систему с использованием HTTP-аутентификации, установив HTTP-заголовок «Authorization», при этом значение этого заголовка будет установлено в строку «базовое имя пользователя:пароль», но с частью «имя пользователя:пароль» строки, закодированной в Base 64. .

http://frontier.userland.com/stories/storyReader$2159

Небольшое исследование показало, что GreaseMonkey имеет встроенную функцию, с помощью которой вы можете отправлять запросы GET/POST на сервер под названием GM_xmlhttpRequest.

http://diveintogreasemonkey.org/api/gm_xmlhttprequest.html

Итак, сложив все это вместе (а также получив этот код JavaScript для преобразования строк в base64, я получаю следующее

http://www.webtoolkit.info/javascript-base64.html

var loggedInText = document.getElementById('metanav').firstChild.firstChild.innerHTML;
if (loggedInText != "logged in as jklp") {
    var username = 'jklp';
    var password = 'jklpPass';
    var base64string = Base64.encode(username + ":" + password);

    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://foo.com/trac/login',
        headers: {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3',
            'Accept': 'application/atom+xml,application/xml,text/xml',
            'Authorization':'Basic ' + base64string,
        }
    });
}

Поэтому, когда я сейчас захожу на сайт, он пересекает DOM, и если я не вошел в систему, он автоматически регистрирует меня.

Другие советы

Информация HTTP-аутентификации отправляется при каждом запросе, а не только для входа в систему.Браузер будет кэшировать информацию для входа в сеанс после первого входа в систему.Таким образом, вы ничего не сохраните, пытаясь проверить, вошли ли вы уже в систему.

Вы также можете вообще забыть о Greasemonkey и просто указать свой логин по URL-адресу, например:

http://username:password@host/

Конечно, сохранение этого в закладке может представлять угрозу безопасности, но не более, чем сохранение пароля в браузере.

Почему бы вам не использовать Firefox (я предполагаю, что вы используете Firefox), чтобы запомнить свои учетные данные с помощью диспетчера паролей?

Я нашел эту ссылку: HTTP-аутентификация с помощью HTML-форм.Похоже, вы можете использовать JavaScript для аутентификации HTTP.Однако я не думаю, что у вас может быть прерывание Greasemonkey при первом переходе по URL-адресу.Возможно, вам придется настроить какую-то точку запуска, которую вы можете использовать для автоматического перенаправления Greasemonkey + входа в систему.Например, у вас может быть локальная страница, которая принимает целевой URL-адрес в строке запроса, а Greasemonkey автоматически выполняет аутентификацию + перенаправление.Единственная проблема заключается в том, что вам придется обернуть закладки сайта стартовой страницей для закладок, которые вы используете в качестве точек входа.

"http://имя пользователя:пароль@хост/" не работает в IE, FireFox работает нормально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top