I en Go-forward-proxy läser r.BasicAuth headern Authorization, som hör till inloggningen på målwebbplatsen. Själva proxyns autentiseringsuppgifter kommer i Proxy-Authorization.

En liten adapter kan återanvända den offentliga parsern utan att ändra den ursprungliga begäran:

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()
}

Det här utdraget använder net/http. Det returnerar de parsade värdena och en flagga för lyckad parsning; det autentiserar inte kontot. Skicka resultatet vidare till proxyns avsedda validerare för autentiseringsuppgifter.

Om autentiseringen misslyckas, returnera 407 med en lämplig Proxy-Authenticate-utmaning och stoppa behandlingen av den begäran. Autentisera innan du öppnar en anslutning till målet eller accepterar en CONNECT-tunnel.

När autentiseringsuppgifterna har accepterats, förbruka proxyns egen Proxy-Authorization-header före den vanliga vidarebefordran. Behåll det ursprungliga Authorization-fältet för origo. En överordnad förälderproxy, om en sådan finns, behöver sin egen medvetna autentiseringslösning i stället för att av misstag ta emot denna klientautentisering.

Relaterade artiklar