Autentificare prin proxy URL în Emacs 31.1: auth-source și limitele CONNECT
Configurați un proxy HTTP autentificat pentru biblioteca URL din Emacs, înțelegeți căutarea acreditărilor Basic și țineți cont de calea HTTPS CONNECT în Emacs 31.1.
Adresa proxy-ului îi spune Emacs unde să se conecteze. Autentificarea este o altă parte a conversației. Pentru o cerere HTTP obișnuită, biblioteca URL din Emacs poate răspunde la o provocare de autentificare a proxy-ului, poate obține acreditări din auth-source sau le poate cere interactiv și poate reutiliza acreditările păstrate în sesiune.
Detaliile de mai jos urmează Emacs 31.1. Ele privesc operațiile care folosesc biblioteca URL; un descărcător extern lansat de un pachet Emacs are propria cale de autentificare.
Stabiliți ruta, apoi lăsați HTTP să ceară autentificarea
Un punct final fix de proxy poate fi ales cu opțiunea documentată:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
Înlocuiți substituentul cu punctul final furnizat. Cheile descriu schemele URL ale destinației. Adăugarea intrării HTTPS selectează o rută pentru destinațiile HTTPS; ea nu furnizează ea însăși acreditări.
În timpul unei cereri HTTP obișnuite, un proxy poate răspunde cu 407 Proxy Authentication Required și o provocare Proxy-Authenticate. Biblioteca URL alege o schemă de autentificare acceptată și obține acreditări pentru punctul final al proxy-ului. Apoi reîncearcă cu Proxy-Authorization.
Pentru autentificarea Basic, o cerere interactivă poate cere un nume de utilizator și o parolă atunci când acreditările potrivite nu sunt disponibile. O cerere marcată ca neinteractivă nu se poate baza pe acele solicitări. Autentificarea prin proxy este și ea separată de autentificarea pe site-ul destinație: provocarea 401 a unui site urmează o cale diferită.
Puneți acreditările persistente în auth-source
Dacă auth-source citește deja un fișier criptat de acreditări precum ~/.authinfo.gpg, o intrare Basic pentru acest exemplu are următoarea formă:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
Folosiți contul și secretul reale și asigurați-vă că fișierul se află printre auth-sources configurate. Linia ilustrează câmpurile care se potrivesc; nu este o instrucțiune de a pune o parolă în fișierul de inițializare Lisp.
Două detalii contează în implementarea Basic din Emacs 31.1. Caută numele de gazdă al proxy-ului fără portul TCP numeric și transmite schema URL a proxy-ului ca valoare de port pentru auth-source. Pentru acest proxy HTTP, acea valoare este http, chiar dacă conexiunea TCP folosește portul 8080.
Această căutare nu include realm-ul provocării sau portul numeric al proxy-ului. Nu vă așteptați să selecteze parole Basic diferite pentru mai multe realm-uri sau porturi de proxy pe același nume de gazdă. Digest folosește o altă căutare de gazdă, așa că exemplul de mai sus este specific pentru Basic.
Biblioteca URL păstrează și propriul cache de autentificare. Intrările Basic disting punctele finale de proxy și folosesc potrivirea realm-ului sau a directorului în interiorul unui punct final; acel cache este separat de căutarea în auth-source. Tastarea unei parole la o solicitare poate umple cache-ul sesiunii fără a salva o intrare nouă în fișierul de acreditări persistente.
HTTPS are un pas de autentificare anterior
Pentru o destinație HTTPS printr-un proxy HTTP, Emacs trimite mai întâi CONNECT. Autentificarea poate fi deci necesară înainte de a ajunge la conexiunea criptată cu site-ul.
În Emacs 31.1, constructorul cererii CONNECT verifică autentificarea deja disponibilă prin mecanismul său de autentificare, inclusiv acreditările Basic din cache. Calea sa Basic nu cere și nu aduce o intrare auth-source proaspătă în acel moment. Un răspuns CONNECT diferit de 200 nu intră nici el în handlerul obișnuit de provocare HTTP 407 descris mai sus.
În consecință, o intrare auth-source care poate răspunde la o provocare HTTP Basic normală nu garantează că prima cerere HTTPS a unei sesiuni noi va fi autentificată cu succes. O sesiune cu acreditări adecvate în cache are o stare inițială diferită. Editarea repetată a aceleiași intrări de parolă nu poate, de la sine, elimina această diferență între cele două căi.
Dacă o operație HTTPS se oprește la proxy, stabiliți dacă CONNECT a primit 407 și dacă folosiți comportamentul acestei versiuni. Confirmați și schema de autentificare oferită de proxy. O intrare de acreditări Basic nu este un adaptor universal pentru fiecare sistem de autentificare enterprise.
Păstrați configurația durabilă în opțiunea publică de proxy și în backendul de acreditări ales. Depozitul Basic intern al bibliotecii URL este util pentru înțelegerea acestui comportament, dar popularea manuală a acelei structuri de date private ar lega configurația de detaliile de implementare.