Inloggning via URL-proxy i Emacs 31.1: auth-source och CONNECT-gränser
Ställ in en autentiserad HTTP-proxy för Emacs URL-bibliotek, förstå dess sökning efter Basic-uppgifter och ta hänsyn till HTTPS CONNECT-vägen i Emacs 31.1.
Proxyns adress talar om för Emacs var den ska ansluta. Dess inloggning är en annan del av samtalet. För en vanlig HTTP-begäran kan Emacs URL-bibliotek svara på proxyns autentiseringsutmaning, hämta uppgifter från auth-source eller fråga interaktivt, och återanvända uppgifter som hålls i sessionen.
Detaljerna nedan följer Emacs 31.1. De gäller operationer som använder URL-biblioteket; en extern nedladdare som startas av ett Emacs-paket har sin egen autentiseringsväg.
Ange vägen och låt sedan HTTP fråga efter inloggningen
En fast proxy-slutpunkt kan väljas med det dokumenterade alternativet:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
Ersätt platshållaren med den angivna slutpunkten. Nycklarna beskriver mål-URL:ens scheman. Att lägga till HTTPS-posten väljer en väg för HTTPS-mål; den tillhandahåller inte själv några uppgifter.
Under en vanlig HTTP-begäran kan en proxy svara med 407 Proxy Authentication Required och en Proxy-Authenticate-utmaning. URL-biblioteket väljer ett autentiseringsschema som stöds och hämtar uppgifter för proxyns slutpunkt. Därefter försöker det igen med Proxy-Authorization.
För Basic-autentisering kan en interaktiv begäran fråga efter användarnamn och lösenord när lämpliga uppgifter saknas. En begäran som markerats som icke-interaktiv kan inte förlita sig på dessa frågor. Proxy-inloggningen är också skild från inloggningen på målwebbplatsen: en webbplats 401-utmaning följer en annan väg.
Lägg beständiga uppgifter i auth-source
Om auth-source redan läser en krypterad uppgiftsfil som ~/.authinfo.gpg, har en Basic-post för det här exemplet följande form:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
Använd ditt faktiska konto och din hemlighet, och se till att filen finns bland dina konfigurerade auth-sources. Raden illustrerar matchande fält; den är inte en instruktion att lägga ett lösenord i din Lisp-initieringsfil.
Två detaljer är viktiga i Basic-implementeringen i Emacs 31.1. Den slår upp proxyns värdnamn utan den numeriska TCP-porten, och den skickar proxyns URL-schema som auth-sources portvärde. För den här HTTP-proxyn är det värdet http, även om TCP-anslutningen använder port 8080.
Den här sökningen omfattar inte utmaningens realm eller den numeriska proxyporten. Förvänta dig inte att den väljer olika Basic-lösenord för flera realms eller proxyportar på samma värdnamn. Digest använder en annan värdsökning, så exemplet ovan gäller specifikt för Basic.
URL-biblioteket har också en egen autentiseringscache. Dess Basic-poster skiljer mellan proxy-slutpunkter och använder realm- eller katalogmatchning inom en slutpunkt; cachen är skild från auth-source-sökningen. Att skriva ett lösenord vid en fråga kan fylla sessionens cache utan att spara en ny post i din beständiga uppgiftsfil.
HTTPS har ett tidigare autentiseringssteg
För ett HTTPS-mål genom en HTTP-proxy skickar Emacs först CONNECT. Autentisering kan därför behövas innan det når den krypterade anslutningen till webbplatsen.
I Emacs 31.1 kontrollerar byggaren av CONNECT-begäran autentisering som redan är tillgänglig via dess autentiseringsmekanism, inklusive cachade Basic-uppgifter. Dess Basic-väg frågar inte efter och hämtar inte en ny auth-source-post vid den punkten. Ett CONNECT-svar som inte är 200 går inte heller in i den vanliga HTTP 407-utmaningshanteraren som beskrivs ovan.
Därför garanterar inte en auth-source-post som kan svara på en normal HTTP Basic-utmaning att den första HTTPS-begäran i en ny session autentiseras korrekt. En session med lämpliga cachade uppgifter har ett annat utgångsläge. Upprepad redigering av samma lösenordspost kan inte i sig själv ta bort den här skillnaden mellan de två vägarna.
Om en HTTPS-operation stannar vid proxyn, fastställ om CONNECT fick 407 och om du använder beteendet i den här utgåvan. Bekräfta också autentiseringsschemat som proxyn erbjuder. En Basic-uppgiftspost är ingen universell adapter för alla företagsautentiseringssystem.
Behåll den varaktiga konfigurationen i det offentliga proxy-alternativet och i den uppgiftsbackend du valt. URL-bibliotekets interna Basic-lager är användbart för att förstå detta beteende, men att fylla den privata datastrukturen för hand skulle binda uppsättningen till implementeringsdetaljer.