Адреса проксі повідомляє 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 корисне для розуміння цієї поведінки, але ручне заповнення цієї приватної структури даних прив'язало б налаштування до деталей реалізації.

Схожі статті