In einem Go-Forward-Proxy liest r.BasicAuth den Header Authorization, der zum Login der Zielwebsite gehört. Die eigenen Zugangsdaten des Proxys kommen in Proxy-Authorization an.

Ein kleiner Adapter kann den öffentlichen Parser wiederverwenden, ohne die ursprüngliche Anfrage zu verändern:

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

Dieses Fragment verwendet net/http. Es liefert die geparsten Werte und ein Erfolgsflag für das Parsen zurück; es authentifiziert das Konto nicht. Übergeben Sie das Ergebnis an den vorgesehenen Validator für die Zugangsdaten des Proxys.

Wenn die Authentifizierung fehlschlägt, geben Sie 407 mit einer passenden Proxy-Authenticate-Herausforderung zurück und beenden Sie die Verarbeitung dieser Anfrage. Authentifizieren Sie, bevor Sie eine Verbindung zum Ziel öffnen oder einen CONNECT-Tunnel annehmen.

Nach Annahme der Zugangsdaten verbrauchen Sie den eigenen Proxy-Authorization-Header des Proxys vor der gewöhnlichen Weiterleitung. Bewahren Sie das ursprüngliche Authorization-Feld für den Ursprung auf. Ein vorgeschalteter Elternproxy benötigt eine eigene bewusste Authentifizierungsregelung, statt diese Client-Zugangsdaten versehentlich zu erhalten.

Ähnliche Artikel