Zum Inhalt springen
ecdsa.com
golang-jwt/jwt (Go)Go

Fehlermeldung

token is malformed: token contains an invalid number of segments

Auch ausgegeben als

  • token is malformed: could not base64 decode header: illegal base64 data at input byte 6
  • token contains an invalid number of segments

v5 stellt „token is malformed: “ voran. v4 gibt nur den inneren Text aus, etwa „token contains an invalid number of segments“. Der Byte-Offset in „illegal base64 data at input byte N“ zeigt auf das erste ungültige Zeichen.

golang-jwt/jwt (Go) — jwt.ErrTokenMalformed

Was der Fehler bedeutet

golang-jwt konnte nicht einmal die Struktur des Tokens lesen. „invalid number of segments“ bedeutet, dass der String nicht genau zwei Punkte enthält; „could not base64 decode header“ bedeutet, dass das erste Segment kein base64url ist – klassischerweise, weil noch das Präfix `Bearer ` davorhängt (Byte 6 ist das Leerzeichen). In v5 sind diese Fehler in `jwt.ErrTokenMalformed` verpackt; es wurde kein Schlüssel nachgeschlagen.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Den Extractor für Anfragen verwenden

    `github.com/golang-jwt/jwt/v5/request` entfernt das Schema `Bearer` ohne Rücksicht auf Groß- und Kleinschreibung und gibt `request.ErrNoTokenInRequest` zurück, wenn überhaupt kein Token vorhanden ist.

    go
    import "github.com/golang-jwt/jwt/v5/request"
    
    token, err := request.ParseFromRequest(r, request.OAuth2Extractor, keyfunc,
    	request.WithParser(jwt.NewParser(jwt.WithValidMethods([]string{"ES256"}))))
    if err != nil {
    	http.Error(w, "unauthorized", http.StatusUnauthorized)
    	return
    }
  2. 2.

    Form vor dem Parsen prüfen

    Das Zählen der Punkte unterscheidet JWS (2), JWE (4) und Datenmüll. Antworte mit 401 auf alles, was kein Token ist, das du verarbeiten kannst.

    go
    raw := strings.TrimSpace(strings.TrimPrefix(r.Header.Get("Authorization"), "Bearer "))
    switch strings.Count(raw, ".") {
    case 2: // JWS: parse it
    case 4: // JWE: decrypt first (go-jose), golang-jwt does not handle encrypted tokens
    default:
    	http.Error(w, "unauthorized", http.StatusUnauthorized)
    	return
    }

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen