Proxy-Authorization in einem Go-Forward-Proxy parsen
Parsen Sie Proxy-Authorization in einem Go-Forward-Proxy getrennt, ohne den Authorization-Header des Ursprungs zu verändern.
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.