Maison  >  Article  >  développement back-end  >  Pourquoi l'authentification HTTP de base échoue-t-elle lors de Go lorsque des redirections se produisent ?

Pourquoi l'authentification HTTP de base échoue-t-elle lors de Go lorsque des redirections se produisent ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-21 04:46:17328parcourir

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

Gestion de base de l'authentification HTTP dans Go

Lors de la mise en œuvre de l'authentification HTTP de base dans Go, des défis inattendus peuvent survenir. Cet article se penche sur un problème courant rencontré lors de la tentative d'implémentation de l'authentification HTTP de base.

Problème : Une erreur indiquant « schéma de protocole non pris en charge » est rencontrée lors de l'exécution du code suivant :

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
}

Cause : Lorsque des redirections se produisent, Go-lang supprime tous les en-têtes spécifiés, y compris l'en-tête d'autorisation défini pour l'authentification de base.

Solution : Pour rectifier Ce problème, une fonction de politique de redirection personnalisée peut être implémentée :

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

Cette fonction garantit que l'en-tête Authorization est rajouté lors des redirections, préservant ainsi efficacement les informations d'authentification.

Mise en œuvre :

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

En utilisant la fonction de stratégie de redirection, les en-têtes spécifiés, y compris l'en-tête Authorization pour l'authentification de base, persisteront tout au long des redirections, garantissant une authentification réussie avec le serveur cible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn