Adresa proxyja govori Emacsu gdje da se poveže. Njegova prijava je drugi dio razgovora. Za običan HTTP zahtjev, Emacs URL biblioteka može odgovoriti na proxy izazov autentifikacije, dobiti akreditive iz auth-source ili ih pitati interaktivno, i ponovo iskoristiti akreditive zadržane u sesiji.

Detalji u nastavku prate Emacs 31.1. Oni se tiču radnji koje koriste URL biblioteku; vanjski preuzimač koji pokrene Emacs paket ima vlastitu putanju autentifikacije.

Postavite rutu, pa pustite HTTP da zatraži prijavu

Fiksna završna tačka proxyja može se izabrati dokumentovanom opcijom:

(setq url-proxy-services
      '(("http" . "proxy.example:8080")
        ("https" . "proxy.example:8080")))

Zamijenite rezervisano mjesto isporučenom završnom tačkom. Ključevi opisuju šeme odredišnog URL-a. Dodavanje unosa HTTPS bira rutu za HTTPS odredišta; ono samo po sebi ne daje akreditive.

Tokom običnog HTTP zahtjeva proxy može odgovoriti sa 407 Proxy Authentication Required i izazovom Proxy-Authenticate. URL biblioteka bira podržanu šemu autentifikacije i pribavlja akreditive za završnu tačku proxyja. Zatim ponavlja pokušaj sa Proxy-Authorization.

Za Basic autentifikaciju, interaktivni zahtjev može tražiti korisničko ime i lozinku kada odgovarajuće akreditive nisu dostupne. Zahtjev označen kao neinteraktivan ne može se osloniti na te upite. Proxy prijava je takođe odvojena od prijave na odredišnu web stranicu: izazov 401 web stranice slijedi drugačiju putanju.

Stavite trajne akreditive u auth-source

Ako auth-source već čita šifrovanu datoteku akreditiva kao što je ~/.authinfo.gpg, Basic unos za ovaj primjer ima sljedeći oblik:

machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD

Koristite svoj stvarni račun i tajnu i uvjerite se da je datoteka među vašim konfigurisanim auth-sources. Red ilustruje polja podudaranja; to nije uputstvo da stavite lozinku u svoju Lisp inicijalizacionu datoteku.

Dva detalja su važna u Basic implementaciji Emacsa 31.1. Ona traži ime hosta proxyja bez numeričkog TCP porta i prosljeđuje šemu URL-a proxyja kao vrijednost porta za auth-source. Za ovaj HTTP proxy ta vrijednost je http, iako TCP veza koristi port 8080.

Ovo traženje ne uključuje realm izazova ni numerički port proxyja. Ne očekujte da će izabrati različite Basic lozinke za nekoliko realmova ili portova proxyja na istom imenu hosta. Digest koristi drugačije traženje hosta, pa je gornji primjer posebno za Basic.

URL biblioteka takođe drži vlastiti keš autentifikacije. Njeni Basic unosi razlikuju završne tačke proxyja i koriste podudaranje realma ili direktorija unutar završne tačke; taj keš je odvojen od traženja u auth-source. Upisivanje lozinke na upitu može napuniti keš sesije bez čuvanja novog unosa u vašoj datoteci trajnih akreditiva.

HTTPS ima raniji korak autentifikacije

Za HTTPS odredište kroz HTTP proxy, Emacs prvo šalje CONNECT. Autentifikacija stoga može biti potrebna prije nego što stigne do šifrovane veze sa web stranicom.

U Emacsu 31.1, graditelj CONNECT zahtjeva provjerava autentifikaciju koja je već dostupna kroz njegovu mašineriju autentifikacije, uključujući keširane Basic akreditive. Njegova Basic putanja ne pita i ne pribavlja svježi auth-source unos u tom trenutku. CONNECT odgovor koji nije 200 takođe ne ulazi u obični HTTP 407 obrađivač izazova opisan gore.

Prema tome, auth-source unos koji može odgovoriti na normalan HTTP Basic izazov ne garantuje da će prvi HTTPS zahtjev nove sesije biti uspješno autentifikovan. Sesija sa odgovarajućim keširanim akreditivima ima drugačije početno stanje. Ponovljeno uređivanje istog unosa lozinke ne može samo po sebi ukloniti ovu razliku između dvije putanje.

Ako se HTTPS radnja zaustavi na proxyju, utvrdite da li je CONNECT primio 407 i da li koristite ponašanje ovog izdanja. Potvrdite i šemu autentifikacije koju proxy nudi. Basic unos akreditiva nije univerzalni adapter za svaki poslovni sistem autentifikacije.

Držite trajnu konfiguraciju u javnoj opciji proxyja i u odabranom pozadinskom sistemu akreditiva. Interno Basic spremište URL biblioteke korisno je za razumijevanje ovog ponašanja, ali ručno punjenje te privatne strukture podataka vezalo bi postavku za detalje implementacije.

Povezani članci