Maison > développement back-end > Golang > 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
Libérer: 2024-11-21 04:46:17
original
392 Les gens l'ont consulté

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
}
Copier après la connexion

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
}
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal