Table des matières
Analyser l'en-tête d'autorisation
Obtenez une en-tête d'autorisation
Analyser les informations d'authentification de base
Exemple complet
Choses à noter
Résumer
Maison développement back-end Golang Tutoriel sur la mise en œuvre du décodage d'authentification de base en langue go

Tutoriel sur la mise en œuvre du décodage d'authentification de base en langue go

Aug 27, 2025 am 10:30 AM

Tutoriel sur la mise en œuvre du décodage d'authentification de base dans le langage Go

Ce document décrit comment décoder les informations d'authentification de base dans les demandes HTTP dans GO. Bien que Go lui-même n'intercepte pas directement l'authentification de base dans le navigateur, il peut obtenir le nom d'utilisateur et le mot de passe en analysant le champ d'autorisation dans l'en-tête de demande et effectuer le décodage de base64. Cet article fournira des étapes détaillées et un exemple de code pour aider les développeurs à mettre en œuvre l'analyse d'authentification de base dans les applications GO.

Analyser l'en-tête d'autorisation

Les informations d'authentification de base sont généralement contenues dans l'en-tête d'autorisation pour les demandes HTTP. GO Language peut accéder à ces informations via le champ d'en-tête de l'objet HTTP.Request.

Obtenez une en-tête d'autorisation

Tout d'abord, vous devez obtenir la valeur de l'en-tête d'autorisation. Dans l'objet HTTP.Request de Go's, l'en-tête est un type de chaîne de carte [String] [], vous pouvez donc l'obtenir de la manière suivante:

 package principal

importer (
    "FMT"
    "net / http"
)

Func Handler (w http.ResponseWriter, r * http.request) {
    Authheader: = R.Header ["Autorisation"]
    fmt.fprintf (W, "En-tête d'autorisation:% V \ n", Authheader)
}

func main () {
    http.handlefunc ("/", gestionnaire)
    http.ListenandServe (": 8080", nil)
}

Dans cet exemple, la variable Authheader contiendra une tranche de chaîne, où le premier élément est généralement la valeur de l'en-tête d'autorisation.

Analyser les informations d'authentification de base

La valeur d'en-tête d'autorisation est généralement sous la forme de Nom d'utilisateur codé de base . Vous devez extraire la partie codée Base64 et la décoder.

 package principal

importer (
    "Encodage / base64"
    "FMT"
    "net / http"
    "Strings"
)

Func Handler (w http.ResponseWriter, r * http.request) {
    Authheader: = R.Header.get ("Autorisation")
    Si authheader == "" {
        fmt.fprintf (W, "L'en-tête d'autorisation est manquant \ n")
        Retour
    }

    // Vérifiez s'il s'agit de l'authentification de base
    Authparts: = Strings.split (Authheader, "")
    Si Len (Authparts)! = 2 || Strings.tolower (Authparts [0])! = "Basic" {
        fmt.fprintf (W, "format d'en-tête d'autorisation non valide \ n")
        Retour
    }

    // Decode Base64
    Base64Encoded: = Authparts [1]
    décodé, err: = base64.stDencoding.decodestring (base64encoded)
    Si err! = Nil {
        fmt.fprintf (W, "Error Decoding Base64:% v \ n", err)
        Retour
    }

    // Nom d'utilisateur et mot de passe Split UserPass: = String (décodé)
    parties: = Strings.splitn (UserPass, ":", 2)
    Si Len (parties)! = 2 {
        fmt.fprintf (w, "nom d'utilisateur invalide: format de mot de passe \ n")
        Retour
    }

    Nom d'utilisateur: = pièces [0]
    Mot de passe: = pièces [1]

    fmt.fprintf (w, "nom d'utilisateur:% s, mot de passe:% s \ n", nom d'utilisateur, mot de passe)
}

func main () {
    http.handlefunc ("/", gestionnaire)
    http.ListenandServe (": 8080", nil)
}

Dans cet exemple, nous vérifions d'abord si l'en-tête d'autorisation existe, puis vérifions que son format est un nom d'utilisateur de base . Ensuite, nous utilisons la fonction Base64.stDencoding.Decodestring pour décoder la chaîne codée Base64 et diviser le résultat en nom d'utilisateur et mot de passe.

Exemple complet

Voici un exemple complet de la façon de gérer l'authentification de base dans GO.

 package principal

importer (
    "Encodage / base64"
    "FMT"
    "enregistrer"
    "net / http"
    "Strings"
)

Func BasicAuth (Handler http.handlerfunc, royaume String) http.handlerfunc {
    return func (w http.ResponseWriter, r * http.request) {
        auth: = r.header.get ("autorisation")
        Si auth == "" {
            w.header (). set ("www-authenticate", `rène de base =" `royaume` "`)
            W.WriteHeader (http.statusunauthorized)
            w.write ([] byte ("non autorisé. \ n"))
            Retour
        }

        Authparts: = Strings.split (auth, "")
        Si Len (Authparts)! = 2 || Strings.tolower (Authparts [0])! = "Basic" {
            Http.Error (W, "Format d'en-tête d'autorisation invalide", http.statusunAuthorized)
            Retour
        }

        charge utile, err: = base64.stDencoding.decodestring (authparts [1])
        Si err! = Nil {
            Http.Error (W, "Format d'en-tête d'autorisation invalide", http.statusunAuthorized)
            Retour
        }

        paire: = Strings.splitn (String (charge utile), ":", 2)
        Si Len (paire)! = 2 {
            Http.Error (W, "Format d'en-tête d'autorisation invalide", http.statusunAuthorized)
            Retour
        }

        Nom d'utilisateur, mot de passe: = paire [0], paire [1]

        // Vérifiez le nom d'utilisateur et le mot de passe ici si! CheckCredentials (nom d'utilisateur, mot de passe) {
            w.header (). set ("www-authenticate", `rène de base =" `royaume` "`)
            W.WriteHeader (http.statusunauthorized)
            w.write ([] byte ("non autorisé. \ n"))
            Retour
        }

        Handler (W, R)
    }
}

func checkCredentials (nom d'utilisateur, chaîne de mot de passe) bool {
    // Dans l'application réelle, vous devez vérifier le nom d'utilisateur et le mot de passe de la base de données ou d'autres endroits // Ce n'est qu'un exemple simple. Return username == "admin" && mot de passe == "mot de passe"
}

func protectedHandler (w http.responsewriter, r * http.request) {
    fmt.fprintln (w, "Bienvenue dans la zone protégée!")
}

func main () {
    Protégé: = http.handlerfunc (ProtectedHandler)
    http.handlefunc ("/", BasicAuth (protégé, "mon royaume"))

    Log.println ("Serveur démarré sur: 8080")
    Log.fatal (http.ListenandServe (": 8080", nil))
}

Dans cet exemple, la fonction BasicAuth est un middleware pour gérer l'authentification de base. Il vérifie d'abord si l'en-tête d'autorisation existe, et s'il n'existe pas, il renvoie un code d'état 401 non autorisé et définit l'en-tête WWW-Authenticate. Si l'en-tête d'autorisation existe, décodez le nom d'utilisateur et le mot de passe codés Base64 et appelez la fonction CheckCredentials pour la vérification. Si la vérification échoue, un code d'état 401 non autorisé est renvoyé. Si la vérification est réussie, la fonction de gestionnaire d'origine est appelée.

Choses à noter

  • Sécurité: l'authentification de base elle-même n'est pas sécurisée car elle transmet des noms d'utilisateur et des mots de passe via le codage de base64 et est facilement écouté. Dans les environnements de production, il est recommandé d'utiliser des méthodes d'authentification plus sûres telles que OAuth 2.0 ou JWT.
  • Gestion des erreurs: Dans les applications réelles, diverses erreurs possibles doivent être traitées, telles que la défaillance de décodage de base64, le nom d'utilisateur et le format de mot de passe, etc.
  • Vérification de l'utilisateur: la fonction CheckCredentials n'est qu'un exemple. Dans l'application réelle, vous devez vérifier le nom d'utilisateur et le mot de passe de la base de données ou ailleurs.
  • HTTPS: Il est fortement recommandé d'utiliser le protocole HTTPS lors de l'utilisation de l'authentification de base pour crypter les données pendant la transmission.

Résumer

Ce document décrit comment décoder les informations d'authentification de base dans les demandes HTTP dans GO. En analysant l'en-tête d'autorisation et en décodant le nom d'utilisateur et le mot de passe codés en base64, une fonction d'authentification simple peut être obtenue. Cependant, comme l'authentification de base elle-même présente des risques de sécurité, il est recommandé d'utiliser une méthode d'authentification plus sûre dans les environnements de production. Dans le même temps, vous devez faire attention à la gestion des erreurs et à la vérification des utilisateurs, et utiliser autant que possible le protocole HTTPS.

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Quelle est la structure structure vide {} utilisée dans Golang Quelle est la structure structure vide {} utilisée dans Golang Sep 18, 2025 am 05:47 AM

Struct {} est une structure sans champ dans GO, qui occupe des octets zéro et est souvent utilisé dans des scénarios où les données ne sont pas nécessaires. Il est utilisé comme signal dans le canal, comme la synchronisation de la goroutine; 2. Utilisé comme collection de types de valeurs de cartes pour réaliser des vérifications de l'existence clé en mémoire efficace; 3. Récepteurs de méthode sans état définissables, adaptés aux fonctions d'injection de dépendance ou d'organisation. Ce type est largement utilisé pour exprimer le débit de contrôle et effacer les intentions.

Comment lisez-vous et écrivez-vous des fichiers dans Golang? Comment lisez-vous et écrivez-vous des fichiers dans Golang? Sep 21, 2025 am 01:59 AM

GoprovidessIMPLEAFEFFIENTSFILEHandlingusingheosandbufiopackages.toreAdasmallFileEentirely, useos.readfile, wholoadStheContenTiToMeMorySafelyandAutomAtical ManagesFileOperations.ForlARGEFILSORINCREM

Résoudre Go WebSocket ERROR: Gardez la connexion active Résoudre Go WebSocket ERROR: Gardez la connexion active Sep 16, 2025 pm 12:15 PM

Cet article vise à résoudre les erreurs EOF (de fin de fichier) rencontrées lors du développement de WebSocket à l'aide de Go. Cette erreur se produit généralement lorsque le serveur reçoit le message client et que la connexion est fermée de manière inattendue, ce qui entraîne la livraison normalement des messages suivants. Cet article analysera les causes du problème, fournira des exemples de code et fournira des solutions correspondantes pour aider les développeurs à créer des applications WebSocket stables et fiables.

Démarrez un éditeur externe dans le programme Go et attendez qu'il termine Démarrez un éditeur externe dans le programme Go et attendez qu'il termine Sep 16, 2025 pm 12:21 PM

Cet article décrit comment démarrer un éditeur externe (comme VIM ou Nano) dans un programme Go et attendre que l'utilisateur ferme l'éditeur avant que le programme ne continue d'exécuter. En définissant CMD.Stdin, Cmd.Stdout et Cmd.Stderr, l'éditeur peut interagir avec le terminal pour résoudre le problème de l'échec du démarrage. Dans le même temps, un exemple de code complet est affiché et des précautions sont fournies pour aider les développeurs à implémenter cette fonction en douceur.

Que sont les middleware dans le contexte des serveurs Web Golang? Que sont les middleware dans le contexte des serveurs Web Golang? Sep 16, 2025 am 02:16 AM

Middlewareingowebserversafunction aterttercepthttprequestsboreetheyreachthehandler, permettre à la transformation de la transmission de la transmission; ils enworkbywrapinghandlerstoaddpre-andpost-processingLogicsuchy

Comment lire la configuration à partir de fichiers de Golang Comment lire la configuration à partir de fichiers de Golang Sep 18, 2025 am 05:26 AM

Utilisez le package Encoding / JSON de la bibliothèque standard pour lire le fichier de configuration JSON; 2. Utilisez la bibliothèque gopkg.in/yaml.v3 pour lire la configuration du format YAML; 3. Utilisez la bibliothèque OS.getenv ou Godotenv pour écraser la configuration du fichier; 4. Utilisez la bibliothèque Viper pour prendre en charge des fonctions avancées telles que la configuration multi-format, les variables d'environnement, le rechargement automatique; Il est nécessaire de définir la structure pour garantir la sécurité de type, gérer correctement les erreurs de fichiers et d'analyse, utiliser correctement les champs de mappage de balises de structure, éviter les chemins à code dur et recommander d'utiliser des variables d'environnement ou un stockage de configuration sûre dans l'environnement de production. Il peut commencer par JSON simple et migrer vers Viper lorsque les exigences sont complexes.

Comment gérez-vous les arrêts gracieux dans une application Golang? Comment gérez-vous les arrêts gracieux dans une application Golang? Sep 21, 2025 am 02:30 AM

GracefulShutdownSingoApplications est en cas de renforcement de la fini auprès, par conduisant en intervenant sur les liens de gits et les procédures de permission, thenstoppingHTTPServersgracetointiaSeshutdownProcedures, thenstoppinghttpServerAlActiveRerequest

GO Language CFB Mode Encryption: Résoudre Nil Pointer Exception de XorkeyStream GO Language CFB Mode Encryption: Résoudre Nil Pointer Exception de XorkeyStream Sep 16, 2025 pm 12:30 PM

Cet article vise à aider les développeurs à comprendre et à résoudre les exceptions de pointes nulles causées par la fonction XorkeyStream qui peut être rencontrée lors de l'utilisation du mode CFB (rétroaction de chiffre) du langage GO pour le cryptage AES. Assurez-vous que le processus de cryptage se déroule bien en analysant les causes courantes des erreurs et en fournissant les exemples de code corrects. L'accent est mis sur l'utilisation correcte des vecteurs d'initialisation (IV) et sur l'importance de comprendre la taille du bloc AES.

See all articles