Вход через прокси URL в Emacs 31.1: auth-source и ограничения CONNECT
Настройте прокси HTTP с аутентификацией для библиотеки URL Emacs, разберитесь в поиске учётных данных Basic и учтите путь HTTPS CONNECT в Emacs 31.1.
Адрес прокси сообщает Emacs, куда подключаться. Его вход — другая часть разговора. Для обычного запроса HTTP библиотека URL Emacs может ответить на запрос аутентификации прокси, получить учётные данные из auth-source или запросить их интерактивно и повторно использовать данные, сохранённые в сеансе.
Подробности ниже соответствуют Emacs 31.1. Они касаются операций с библиотекой URL; внешний загрузчик, запускаемый пакетом Emacs, имеет собственный путь аутентификации.
Задайте маршрут, а затем позвольте HTTP запросить вход
Фиксированную конечную точку прокси можно выбрать документированной опцией:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
Замените заполнитель на предоставленную конечную точку. Ключи описывают схемы URL назначения. Добавление записи HTTPS выбирает маршрут для назначений HTTPS; сама по себе она не предоставляет учётных данных.
Во время обычного запроса HTTP прокси может ответить 407 Proxy Authentication Required и запросом Proxy-Authenticate. Библиотека URL выбирает поддерживаемую схему аутентификации и получает учётные данные для конечной точки прокси. Затем она повторяет попытку с Proxy-Authorization.
При аутентификации Basic интерактивный запрос может запросить имя пользователя и пароль, если подходящие учётные данные недоступны. Запрос, помеченный как неинтерактивный, не может полагаться на эти вопросы. Вход через прокси также отделён от входа на целевой веб-сайт: запрос 401 сайта идёт другим путём.
Храните постоянные учётные данные в auth-source
Если auth-source уже читает зашифрованный файл учётных данных, например ~/.authinfo.gpg, запись Basic для этого примера имеет такой вид:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
Используйте свою настоящую учётную запись и секрет и убедитесь, что файл входит в настроенные вами auth-sources. Строка показывает совпадающие поля; это не инструкция помещать пароль в ваш файл инициализации Lisp.
В реализации Basic в Emacs 31.1 важны две детали. Она ищет имя хоста прокси без числового порта TCP и передаёт схему URL прокси как значение порта для auth-source. Для этого прокси HTTP таким значением является http, хотя TCP-соединение использует порт 8080.
Этот поиск не включает realm запроса или числовой порт прокси. Не ожидайте, что он выберет разные пароли Basic для нескольких realm или портов прокси на одном имени хоста. Digest использует другой поиск хоста, поэтому приведённый пример относится именно к Basic.
Библиотека URL также ведёт собственный кеш аутентификации. Её записи Basic различают конечные точки прокси и используют сопоставление realm или каталога внутри конечной точки; этот кеш отделён от поиска в auth-source. Ввод пароля в запросе может заполнить кеш сеанса, не сохраняя новую запись в вашем файле постоянных учётных данных.
У HTTPS есть более ранний шаг аутентификации
Для назначения HTTPS через прокси HTTP Emacs сначала отправляет CONNECT. Поэтому аутентификация может потребоваться до того, как он достигнет зашифрованного соединения с сайтом.
В Emacs 31.1 построитель запроса CONNECT проверяет аутентификацию, уже доступную через его механизм аутентификации, включая кешированные учётные данные Basic. Его путь Basic в этот момент не запрашивает и не извлекает свежую запись auth-source. Ответ CONNECT, отличный от 200, также не попадает в обычный обработчик запроса HTTP 407, описанный выше.
Следовательно, запись auth-source, которая может ответить на обычный запрос HTTP Basic, не гарантирует, что первый запрос HTTPS нового сеанса будет успешно аутентифицирован. Сеанс с подходящими кешированными данными имеет другое начальное состояние. Многократное редактирование одной и той же записи пароля само по себе не может устранить это различие между двумя путями.
Если операция HTTPS останавливается на прокси, определите, получил ли CONNECT 407 и используете ли вы поведение этого выпуска. Подтвердите также схему аутентификации, которую предлагает прокси. Запись учётных данных Basic не является универсальным адаптером для любой корпоративной системы аутентификации.
Храните долговременную конфигурацию в публичной опции прокси и в выбранном вами хранилище учётных данных. Внутреннее хранилище Basic в библиотеке URL полезно для понимания этого поведения, но заполнение этой частной структуры данных вручную привязало бы настройку к деталям реализации.