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

Fehlermeldung

token has invalid claims: token is expired

Auch ausgegeben als

  • Token is expired
  • token has invalid claims: token is not valid yet
  • token has invalid claims: token used before issued

golang-jwt v4 gibt „Token is expired“ aus (mit großem T). Die anderen Claim-Fehler von v5 verwenden dasselbe Präfix „token has invalid claims:“.

golang-jwt/jwt (Go) — jwt.ErrTokenInvalidClaims joined with jwt.ErrTokenExpired

Was der Fehler bedeutet

Die Signatur des Tokens wurde erfolgreich geprüft, aber sein Claim `exp` liegt in der Vergangenheit (jenseits jeder konfigurierten Toleranz). golang-jwt v5 meldet das als `ErrTokenInvalidClaims`, verknüpft mit `ErrTokenExpired`; dieselbe Familie erzeugt „token is not valid yet“ für ein in der Zukunft liegendes `nbf` und „token used before issued“ für ein in der Zukunft liegendes `iat`. Das geparste Token wird zusammen mit dem Fehler trotzdem zurückgegeben, ihm darf aber nicht vertraut werden.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Ablauf erkennen und den Client per Refresh erneuern lassen

    Bilde `ErrTokenExpired` auf 401 mit dem Hinweis `invalid_token` ab. Der Client verwendet dann sein Refresh Token (oder authentifiziert sich neu) und wiederholt die Anfrage.

    go
    token, err := jwt.Parse(raw, keyfunc, jwt.WithValidMethods([]string{"ES256"}))
    if errors.Is(err, jwt.ErrTokenExpired) {
    	w.Header().Set("WWW-Authenticate", `Bearer error="invalid_token", error_description="token expired"`)
    	http.Error(w, "token expired", http.StatusUnauthorized) // client refreshes and retries
    	return
    }
  2. 2.

    Kleine Uhrenabweichung tolerieren, exp verlangen

    Eine Toleranz von einigen Sekunden fängt Abweichungen zwischen Rechnern ab. `WithExpirationRequired` schließt die entgegengesetzte Lücke: Tokens ohne `exp` würden sonst nie ablaufen.

    go
    parser := jwt.NewParser(
    	jwt.WithValidMethods([]string{"ES256"}),
    	jwt.WithLeeway(30*time.Second), // absorbs clock skew for exp, nbf and iat
    	jwt.WithExpirationRequired(),   // tokens without exp are rejected too
    )

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen