Authentifizierung und Autorisierung in Go (Golang): Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Authentifizierung und Autorisierung in Go (Golang)



In der modernen Webentwicklung mit Go (Golang) sind die Sicherheit von Benutzerdaten und die Zugriffskontrolle kritische Aspekte. Bibliotheken und Werkzeuge für Authentifizierung und Autorisierung ermöglichen es Entwicklern, schnell und zuverlässig Schutz in ihre Anwendungen zu integrieren. In diesem Artikel betrachten wir die grundlegenden Ansätze und beliebten Bibliotheken zur Implementierung von Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Bestimmung der Zugriffsrechte) in Go.



Grundlegende Konzepte



Bevor wir zu den Werkzeugen übergehen, ist es wichtig, zwei Schlüsselbegriffe zu unterscheiden:

  • Authentifizierung — der Prozess der Überprüfung, ob ein Benutzer der ist, der er vorgibt zu sein (normalerweise durch Login/Passwort, Token, OAuth).
  • Autorisierung — der Prozess der Bestimmung, welche Ressourcen und Aktionen einem authentifizierten Benutzer zur Verfügung stehen (Rollen, Zugriffsrechte).


Beliebte Bibliotheken und Werkzeuge



1. bcrypt zum Hashen von Passwörtern

Die Bibliothek golang.org/x/crypto/bcrypt ist der De-facto-Standard für die sichere Speicherung von Passwörtern. Sie fügt automatisch Salt hinzu und verwendet eine adaptive Hash-Funktion.



package main

import ( "fmt" "golang.org/x/crypto/bcrypt")

func main() { password := "mySecretPassword123" // Passwort hashen hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { panic(err) } fmt.Printf("Hash: %s", hash) // Passwort überprüfen err = bcrypt.CompareHashAndPassword(hash, []byte("wrongPassword")) if err != nil { fmt.Println("Passwort falsch:", err) } else { fmt.Println("Passwort korrekt") } // Erfolgreiche Überprüfung err = bcrypt.CompareHashAndPassword(hash, []byte(password)) if err == nil { fmt.Println("Passwort korrekt!") }}


2. JWT (JSON Web Tokens) mit der Bibliothek golang-jwt

Die Bibliothek github.com/golang-jwt/jwt/v5 ermöglicht das Erstellen und Überprüfen von JWT-Token. Dies ist eine beliebte Methode zur Implementierung von zustandsloser Authentifizierung.



package main

import ( "fmt" "time" "github.com/golang-jwt/jwt/v5")

var jwtSecret = []byte("super-secret-key")

func createToken(userID string) (string, error) { claims := jwt.MapClaims{ "user_id": userID, "exp": time.Now().Add(time.Hour * 24).Unix(), "iat": time.Now().Unix(), } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(jwtSecret)}

func validateToken(tokenString string) (string, error) { token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unerwartete Signiermethode: %v", token.Header["alg"]) } return jwtSecret, nil }) if err != nil { return "", err } if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { return claims["user_id"].(string), nil } return "", fmt.Errorf("ungültiger Token")}

func main() { // Token erstellen token, _ := createToken("user123") fmt.Println("JWT Token:", token) // Token überprüfen userID, err := validateToken(token) if err != nil { fmt.Println("Validierungsfehler:", err) } else { fmt.Println("Benutzer-ID aus Token:", userID) }}


3. Session-basierte Authentifizierung mit gorilla/sessions

Für die traditionelle Session-Authentifizierung verwenden Sie github.com/gorilla/sessions. Sessions werden auf dem Server gespeichert, und der Client erhält nur ein Cookie mit der Session-ID.



package main

import ( "net/http" "github.com/gorilla/sessions")\

Empfehlungen