OAuth 2.0 und JWT-Autorisierung in Go: Ein praktischer 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

Einführung in OAuth 2.0 und JWT mit Go

Moderne Webanwendungen und APIs erfordern ein zuverlässiges und sicheres Authentifizierungs- und Autorisierungssystem. Die beiden gängigsten Standards in diesem Bereich sind OAuth 2.0 und JWT (JSON Web Tokens). In der Sprache Go (Golang) wird die Implementierung dieser Mechanismen dank der integrierten Unterstützung für Nebenläufigkeit, hoher Leistung und einem reichhaltigen Ökosystem an Bibliotheken besonders effizient.

In diesem Artikel werden wir im Detail besprechen, wie man OAuth 2.0 und JWT-Autorisierung mit Go implementiert. Sie erfahren, wie Sie einen Server einrichten, Token generieren und überprüfen sowie Ihre Endpunkte schützen. Das Material ist sowohl für Anfänger als auch für erfahrene Go-Entwickler nützlich.



Grundlagen von OAuth 2.0 und JWT

Was ist OAuth 2.0?

OAuth 2.0 ist ein Autorisierungsprotokoll, das es Anwendungen ermöglicht, eingeschränkten Zugriff auf Benutzerressourcen zu erhalten, ohne das Passwort weiterzugeben. Stattdessen werden Access Tokens verwendet. Die Hauptakteure des Prozesses sind:

  • Resource Owner — der Benutzer, der die Daten besitzt
  • Client — die Anwendung, die Zugriff anfordert
  • Authorization Server — der Server, der Token ausstellt
  • Resource Server — der Server, der geschützte Ressourcen bereitstellt


Was ist JWT?

JWT (JSON Web Token) ist ein kompaktes und eigenständiges Format zur Übertragung von Daten zwischen Parteien als JSON-Objekt. Der Token besteht aus drei Teilen, die durch Punkte getrennt sind:

header.payload.signature

Vorteile von JWT:

  • Erfordert keine Speicherung von Sitzungen auf dem Server (zustandslos)
  • Enthält alle notwendigen Informationen (Claims)
  • Ist zur Überprüfung der Integrität signiert


Implementierung der JWT-Autorisierung mit Go

Für die Arbeit mit JWT in Go verwenden wir die beliebte Bibliothek golang-jwt/jwt/v5. Installieren Sie sie mit dem Befehl:

go get github.com/golang-jwt/jwt/v5


Generierung eines JWT-Tokens

Erstellen wir eine Funktion zur Generierung von Access- und Refresh-Tokens:

package auth

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

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

type Claims struct { UserID uint `json:"user_id"` Email string `json:"email"` jwt.RegisteredClaims}

func GenerateAccessToken(userID uint, email string) (string, error) { claims := &Claims{ UserID: userID, Email: email, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)), IssuedAt: jwt.NewNumericDate(time.Now()), Issuer: "myapp", }, }

token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(jwtSecret)}

func GenerateRefreshToken(userID uint) (string, error) { claims := &Claims{ UserID: userID, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(7 * 24 * time.Hour)), IssuedAt: jwt.NewNumericDate(time.Now()), }, }

token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(jwtSecret)}


Überprüfung des JWT-Tokens

Middleware zur Überprüfung des Tokens in HTTP-Anfragen:

package middleware

import ( "net/http" "strings" "github.com/gin-gonic/gin" "myapp/auth")

func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { authHeader := c.GetHeader("Authorization") if authHeader == "" { c.JSON(http.StatusUnauthorized, gin.H{"error": "missing authorization header"}) c.Abort() return }

tokenString := strings.TrimPrefix(authHeader, "Bearer ") if tokenString == authHeader {

Blogs

Buchempfehlungen