In un forward proxy Go, r.BasicAuth legge l'intestazione Authorization, che appartiene all'accesso del sito web di destinazione. Le credenziali del proxy stesso arrivano in Proxy-Authorization.

Un piccolo adattatore può riutilizzare il parser pubblico senza modificare la richiesta originale:

func proxyBasicAuth(r *http.Request) (string, string, bool) {
    headers := make(http.Header)
    headers.Set("Authorization", r.Header.Get("Proxy-Authorization"))
    return (&http.Request{Header: headers}).BasicAuth()
}

Questo frammento usa net/http. Restituisce i valori analizzati e un indicatore di analisi riuscita; non autentica l'account. Passate il risultato al validatore di credenziali previsto dal proxy.

Se l'autenticazione fallisce, restituite 407 con una sfida Proxy-Authenticate adeguata e interrompete l'elaborazione di quella richiesta. Autenticate prima di aprire una connessione alla destinazione o di accettare un tunnel CONNECT.

Dopo aver accettato le credenziali, consumate l'intestazione Proxy-Authorization del proxy stesso prima dell'inoltro ordinario. Preservate il campo Authorization originale per l'origine. Un proxy padre a monte, se presente, necessita di una propria configurazione di autenticazione deliberata invece di ricevere per caso questa credenziale del client.

Articoli correlati