JWT-Tokens in Go (Golang): Vollständige Anleitung
\n\nJSON Web Tokens (JWT) sind ein offener Standard (RFC 7519) zur Erstellung von Zugriffstokens auf Basis von JSON. JWT wird häufig für die Authentifizierung und den Informationsaustausch zwischen Client und Server verwendet. In der Sprache Go (Golang) wird die Arbeit mit JWT-Tokens dank der Bibliothek golang-jwt/jwt einfach und effizient umgesetzt.
In diesem Artikel werden wir die Erstellung, Signatur, Überprüfung und Verwendung von JWT-Tokens in Go im Detail besprechen. Das Material ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich, die eine sichere Authentifizierung in ihre Golang-Projekte implementieren möchten.
\n\nInstallation der Bibliothek golang-jwt
\n\nFür die Arbeit mit JWT in Go wird das Paket github.com/golang-jwt/jwt/v5 verwendet. Installieren Sie es mit dem Befehl:
go get github.com/golang-jwt/jwt/v5\n\nNach der Installation können Sie das Paket in Ihren Code importieren:
\n\nimport (\n "github.com/golang-jwt/jwt/v5"\n)\n\nStruktur eines JWT-Tokens
\n\nEin JWT-Token besteht aus drei Teilen, die durch Punkte getrennt sind:
\n\n- \n
- Header — enthält den Tokentyp (JWT) und den Signaturalgorithmus (z.B. HS256 oder RS256). \n
- Payload (Nutzlast) — enthält die Daten (Claims), wie Benutzer-ID, Rolle, Ablaufdatum usw. \n
- Signature (Signatur) — wird basierend auf Header und Payload mit einem geheimen Schlüssel oder einem RSA/ECDSA-Schlüsselpaar erstellt. \n
Erstellung eines JWT-Tokens in Go
\n\nBetrachten wir ein Beispiel zur Erstellung eines JWT-Tokens mit dem HMAC-SHA256 (HS256) Algorithmus. Dazu wird ein geheimer Schlüssel benötigt.
\n\npackage main\n\nimport (\n "fmt"\n "time"\n "github.com/golang-jwt/jwt/v5"\n)\n\nfunc main() {\n // Geheimer Schlüssel (muss an einem sicheren Ort aufbewahrt werden)\n secretKey := []byte("my_secret_key_12345")\n\n // Claims (Behauptungen) erstellen\n claims := jwt.MapClaims{\n "user_id": 123,\n "role": "admin",\n "exp": time.Now().Add(time.Hour * 24).Unix(), // Token ist 24 Stunden gültig\n "iat": time.Now().Unix(),\n }\n\n // Token erstellen\n token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)\n\n // Token mit dem geheimen Schlüssel signieren\n tokenString, err := token.SignedString(secretKey)\n if err != nil {\n fmt.Println("Fehler bei der Token-Erstellung:", err)\n return\n }\n\n fmt.Println("Erstellter JWT-Token:")\n fmt.Println(tokenString)\n}\n\nÜberprüfung und Parsen eines JWT-Tokens
\n\nZur Überprüfung der Authentizität des Tokens wird derselbe geheime Schlüssel verwendet. Es ist wichtig, die Gültigkeitsdauer und die Signatur zu prüfen.
\n\npackage main\n\nimport (\n "fmt"\n "github.com/golang-jwt/jwt/v5"\n)\n\nfunc main() {\n tokenString := "ihr_token_hier"\n secretKey := []byte("my_secret_key_12345")\n\n // Token parsen und überprüfen\n token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {\n // Signaturalgorithmus überprüfen\n if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {\n return nil, fmt.Errorf("unerwartete Signaturmethode: %v", token.Header["alg"])\n }\n return secretKey, nil\n })\n\n if err != nil {\n fmt.Println("Fehler bei der Token-Überprüfung:", err)\n return\n }\n\n // Claims extrahieren\n if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {\n fmt.Println("Token ist gültig!")\n fmt.Printf("User ID: %v\\n", claims["user_id"])\n fmt.Printf("Rolle: %v\\n", claims["role"])\n } else {\n fmt.Println("Token ist ungültig")\n }\n}\n\nVerwendung strukturierter Claims
\n\nDer Einfachheit halber können Sie eine eigene Claims-Struktur definieren, die das Interface jwt.Claims implementiert:
type CustomClaims struct {\n UserID int `json:"user_id"`\n Role string `json:"role"`\n jwt.RegisteredCl Auch in der Bibliothek
GraphQL Java – serverseitige Bibliothek zur Implementierung von GraphQL-APIs in Java
Arbeiten mit Markdown in Java: Bibliotheken, Parser und Beispiele
PDF-Generierung in JavaScript: Bibliothek pdf-lib
Geolokalisierung und Karten in TypeScript: Bibliotheken und praktische Beispiele
JMH Java: Vollständiges Tutorial mit Beispielen und Tipps