Heim > Backend-Entwicklung > Golang > Warum schlägt die einfache HTTP-Authentifizierung in Go fehl, wenn Weiterleitungen auftreten?

Warum schlägt die einfache HTTP-Authentifizierung in Go fehl, wenn Weiterleitungen auftreten?

Mary-Kate Olsen
Freigeben: 2024-11-21 04:46:17
Original
385 Leute haben es durchsucht

Why Does Basic HTTP Authentication Fail in Go When Redirects Occur?

Grundlegende HTTP-Authentifizierungsverarbeitung in Go

Bei der Implementierung der grundlegenden HTTP-Authentifizierung in Go können einige unerwartete Herausforderungen auftreten. Dieser Artikel befasst sich mit einem häufigen Problem, das beim Versuch auftritt, die grundlegende HTTP-Authentifizierung zu implementieren.

Problem: Beim Ausführen des folgenden Codes tritt ein Fehler mit der Meldung „nicht unterstütztes Protokollschema“ auf:

func basicAuth() string {
    var username string = "foo"
    var passwd string = "bar"
    client := &http.Client{}
    req, err := http.NewRequest("GET", "mydomain.example", nil)
    req.SetBasicAuth(username, passwd)
    resp, err := client.Do(req)
    if err != nil{
        log.Fatal(err)
    }
    bodyText, err := ioutil.ReadAll(resp.Body)
    s := string(bodyText)
    return s
}
Nach dem Login kopieren

Ursache: Wenn Weiterleitungen auftreten, verwirft Go-lang alle angegebenen Header, einschließlich der Autorisierung Header für Basisauthentifizierung festgelegt.

Lösung:Um dieses Problem zu beheben, kann eine benutzerdefinierte Umleitungsrichtlinienfunktion implementiert werden:

func redirectPolicyFunc(req *http.Request, via []*http.Request) error {
    req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123"))
    return nil
}
Nach dem Login kopieren

Diese Funktion stellt sicher, dass der Autorisierungsheader wird bei Weiterleitungen wieder hinzugefügt, wodurch die Authentifizierung effektiv erhalten bleibt Anmeldeinformationen.

Implementierung:

func main() {
    client := &http.Client{
        Jar: cookieJar,
        CheckRedirect: redirectPolicyFunc,
    }
    req, err := http.NewRequest("GET", "http://localhost/", nil)
    req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) 
    resp, err := client.Do(req)
}
Nach dem Login kopieren

Durch die Verwendung der Weiterleitungsrichtlinienfunktion bleiben die angegebenen Header, einschließlich des Autorisierungsheaders für die Basisauthentifizierung, während der Weiterleitungen bestehen, wodurch sichergestellt wird Erfolgreiche Authentifizierung beim Zielserver.

Das obige ist der detaillierte Inhalt vonWarum schlägt die einfache HTTP-Authentifizierung in Go fehl, wenn Weiterleitungen auftreten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage