URL-Proxy-Anmeldung in Emacs 31.1: auth-source und CONNECT-Grenzen
Richten Sie einen authentifizierten HTTP-Proxy für die URL-Bibliothek von Emacs ein, verstehen Sie deren Basic-Anmeldedatensuche und berücksichtigen Sie den HTTPS-CONNECT-Pfad in Emacs 31.1.
Die Adresse des Proxys sagt Emacs, wohin es sich verbinden soll. Die Anmeldung ist ein anderer Teil des Gesprächs. Bei einer gewöhnlichen HTTP-Anfrage kann die URL-Bibliothek von Emacs eine Authentifizierungsaufforderung des Proxys beantworten, Anmeldedaten aus auth-source beziehen oder interaktiv erfragen und im Sitzungsspeicher gehaltene Anmeldedaten wiederverwenden.
Die folgenden Details beziehen sich auf Emacs 31.1. Sie betreffen Vorgänge, die die URL-Bibliothek verwenden; ein externer Downloader, den ein Emacs-Paket startet, hat seinen eigenen Authentifizierungspfad.
Legen Sie die Route fest und lassen Sie dann HTTP nach der Anmeldung fragen
Ein fester Proxy-Endpunkt lässt sich mit der dokumentierten Option auswählen:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
Ersetzen Sie den Platzhalter durch den bereitgestellten Endpunkt. Die Schlüssel beschreiben die URL-Schemata des Ziels. Der HTTPS-Eintrag wählt eine Route für HTTPS-Ziele; er liefert selbst keine Anmeldedaten.
Während einer gewöhnlichen HTTP-Anfrage kann ein Proxy mit 407 Proxy Authentication Required und einer Proxy-Authenticate-Aufforderung antworten. Die URL-Bibliothek wählt ein unterstütztes Authentifizierungsschema und bezieht Anmeldedaten für den Proxy-Endpunkt. Danach versucht sie es erneut mit Proxy-Authorization.
Bei der Basic-Authentifizierung kann eine interaktive Anfrage nach Benutzername und Passwort fragen, wenn keine geeigneten Anmeldedaten verfügbar sind. Eine als nicht interaktiv markierte Anfrage kann sich nicht auf diese Abfragen verlassen. Die Proxy-Anmeldung ist außerdem von der Anmeldung auf der Zielwebsite getrennt: Die 401-Aufforderung einer Website folgt einem anderen Pfad.
Dauerhafte Anmeldedaten in auth-source ablegen
Wenn auth-source bereits eine verschlüsselte Anmeldedatendatei wie ~/.authinfo.gpg liest, hat ein Basic-Eintrag für dieses Beispiel folgende Form:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
Verwenden Sie Ihr tatsächliches Konto und Geheimnis und stellen Sie sicher, dass die Datei zu Ihren konfigurierten auth-sources gehört. Die Zeile veranschaulicht übereinstimmende Felder; sie ist keine Anweisung, ein Passwort in Ihre Lisp-Initialisierungsdatei zu schreiben.
Zwei Details sind in der Basic-Implementierung von Emacs 31.1 wichtig. Sie sucht den Hostnamen des Proxys ohne den numerischen TCP-Port und übergibt das Schema der Proxy-URL als Portwert an auth-source. Für diesen HTTP-Proxy ist dieser Wert http, obwohl die TCP-Verbindung Port 8080 verwendet.
Diese Suche umfasst weder den Realm der Aufforderung noch den numerischen Proxy-Port. Erwarten Sie nicht, dass sie unterschiedliche Basic-Passwörter für mehrere Realms oder Proxy-Ports unter demselben Hostnamen auswählt. Digest verwendet eine andere Hostsuche, daher gilt das obige Beispiel speziell für Basic.
Die URL-Bibliothek führt außerdem einen eigenen Authentifizierungscache. Ihre Basic-Einträge unterscheiden Proxy-Endpunkte und verwenden innerhalb eines Endpunkts Realm- oder Verzeichnisabgleich; dieser Cache ist von der auth-source-Suche getrennt. Die Eingabe eines Passworts an einer Aufforderung kann den Sitzungscache füllen, ohne einen neuen Eintrag in Ihrer dauerhaften Anmeldedatendatei zu speichern.
HTTPS hat einen früheren Authentifizierungsschritt
Für ein HTTPS-Ziel über einen HTTP-Proxy sendet Emacs zuerst CONNECT. Eine Authentifizierung kann daher nötig sein, bevor die verschlüsselte Verbindung zur Website erreicht wird.
In Emacs 31.1 prüft der Erbauer der CONNECT-Anfrage, ob bereits eine Authentifizierung über seine Authentifizierungsmechanik verfügbar ist, einschließlich zwischengespeicherter Basic-Anmeldedaten. Sein Basic-Pfad fragt zu diesem Zeitpunkt weder nach einem neuen auth-source-Eintrag noch ruft er einen ab. Eine CONNECT-Antwort, die nicht 200 ist, gelangt auch nicht in den oben beschriebenen gewöhnlichen HTTP-407-Aufforderungshandler.
Folglich garantiert ein auth-source-Eintrag, der eine normale HTTP-Basic-Aufforderung beantworten kann, nicht, dass die erste HTTPS-Anfrage einer neuen Sitzung erfolgreich authentifiziert wird. Eine Sitzung mit geeigneten zwischengespeicherten Anmeldedaten hat einen anderen Ausgangszustand. Wiederholtes Bearbeiten desselben Passworteintrags kann diesen Unterschied zwischen den beiden Pfaden nicht aus eigener Kraft beseitigen.
Wenn ein HTTPS-Vorgang am Proxy stehen bleibt, stellen Sie fest, ob CONNECT 407 erhalten hat und ob Sie das Verhalten dieser Version verwenden. Bestätigen Sie außerdem das Authentifizierungsschema, das der Proxy anbietet. Ein Basic-Anmeldedateneintrag ist kein universeller Adapter für jedes Unternehmens-Authentifizierungssystem.
Bewahren Sie die dauerhafte Konfiguration in der öffentlichen Proxy-Option und in Ihrem gewählten Anmeldedaten-Backend auf. Der interne Basic-Speicher der URL-Bibliothek ist nützlich, um dieses Verhalten zu verstehen, aber das manuelle Füllen dieser privaten Datenstruktur würde die Einrichtung an Implementierungsdetails binden.