L'indirizzo del proxy dice a Emacs dove connettersi. Il suo accesso è un'altra parte della conversazione. Per una richiesta HTTP ordinaria, la libreria URL di Emacs può rispondere a una richiesta di autenticazione del proxy, ottenere credenziali da auth-source o chiederle in modo interattivo, e riutilizzare le credenziali conservate nella sessione.

I dettagli seguenti seguono Emacs 31.1. Riguardano le operazioni che usano la libreria URL; un downloader esterno avviato da un pacchetto Emacs ha il proprio percorso di autenticazione.

Impostate il percorso, poi lasciate che HTTP chieda l'accesso

Un endpoint proxy fisso può essere scelto con l'opzione documentata:

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

Sostituite il segnaposto con l'endpoint fornito. Le chiavi descrivono gli schemi URL di destinazione. Aggiungere la voce HTTPS seleziona un percorso per le destinazioni HTTPS; di per sé non fornisce credenziali.

Durante una richiesta HTTP ordinaria, un proxy può rispondere con 407 Proxy Authentication Required e una richiesta Proxy-Authenticate. La libreria URL sceglie uno schema di autenticazione supportato e ottiene le credenziali per l'endpoint del proxy. Poi riprova con Proxy-Authorization.

Per l'autenticazione Basic, una richiesta interattiva può chiedere nome utente e password quando non sono disponibili credenziali adeguate. Una richiesta contrassegnata come non interattiva non può contare su quelle richieste. L'accesso al proxy è anche separato dall'accesso al sito web di destinazione: la richiesta 401 di un sito web segue un percorso diverso.

Mettete le credenziali persistenti in auth-source

Se auth-source legge già un file di credenziali cifrato come ~/.authinfo.gpg, una voce Basic per questo esempio ha la forma seguente:

machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD

Usate il vostro account e segreto reali e assicuratevi che il file sia tra i vostri auth-sources configurati. La riga illustra i campi corrispondenti; non è un'istruzione per mettere una password nel vostro file di inizializzazione Lisp.

Due dettagli contano nell'implementazione Basic di Emacs 31.1. Cerca il nome host del proxy senza la porta TCP numerica e passa lo schema dell'URL del proxy come valore di porta di auth-source. Per questo proxy HTTP quel valore è http, anche se la connessione TCP usa la porta 8080.

Questa ricerca non include il realm della richiesta né la porta numerica del proxy. Non aspettatevi che scelga password Basic diverse per più realm o porte del proxy sullo stesso nome host. Digest usa una ricerca host diversa, quindi l'esempio sopra è specificamente per Basic.

La libreria URL mantiene anche una propria cache di autenticazione. Le sue voci Basic distinguono gli endpoint proxy e usano la corrispondenza di realm o di directory all'interno di un endpoint; quella cache è separata dalla ricerca auth-source. Digitare una password a un prompt può riempire la cache della sessione senza salvare una nuova voce nel file di credenziali persistente.

HTTPS ha un passo di autenticazione precedente

Per una destinazione HTTPS attraverso un proxy HTTP, Emacs invia prima CONNECT. L'autenticazione può quindi essere necessaria prima di raggiungere la connessione cifrata al sito web.

In Emacs 31.1, il costruttore della richiesta CONNECT controlla l'autenticazione già disponibile tramite il suo meccanismo di autenticazione, comprese le credenziali Basic in cache. Il suo percorso Basic non chiede né recupera una nuova voce auth-source in quel momento. Una risposta CONNECT diversa da 200 non entra nemmeno nel gestore ordinario delle richieste HTTP 407 descritto sopra.

Di conseguenza, una voce auth-source in grado di rispondere a una normale richiesta HTTP Basic non garantisce che la prima richiesta HTTPS di una nuova sessione venga autenticata correttamente. Una sessione con credenziali in cache adeguate ha uno stato iniziale diverso. Modificare ripetutamente la stessa voce di password non può da solo eliminare questa differenza tra i due percorsi.

Se un'operazione HTTPS si ferma al proxy, stabilite se CONNECT ha ricevuto 407 e se state usando il comportamento di questa versione. Confermate anche lo schema di autenticazione offerto dal proxy. Una voce di credenziali Basic non è un adattatore universale per ogni sistema di autenticazione aziendale.

Mantenete la configurazione duratura nell'opzione pubblica del proxy e nel backend di credenziali scelto. L'archivio Basic interno della libreria URL è utile per capire questo comportamento, ma popolare a mano quella struttura dati privata legherebbe la configurazione ai dettagli implementativi.

Articoli correlati