Fehlermeldung
token is unverifiable: error while executing keyfunc: kid "2026-10" not found in key set
Auch ausgegeben als
- token is unverifiable: error while executing keyfunc
- token is unverifiable: no keyfunc was provided
Der Text nach „error while executing keyfunc:“ ist das, was deine Keyfunc zurückgegeben hat. Ein Aufruf von `jwt.Parse` mit nil als Keyfunc ergibt „token is unverifiable: no keyfunc was provided“.
golang-jwt/jwt (Go) — jwt.ErrTokenUnverifiable wrapping the error your Keyfunc returned
Was der Fehler bedeutet
golang-jwt konnte keinen Schlüssel beschaffen, um das Token zu prüfen: Deine `Keyfunc` hat einen Fehler zurückgegeben, und golang-jwt hat ihn als `ErrTokenUnverifiable` verpackt („error while executing keyfunc: …“). Alles nach diesem Präfix ist die Meldung deiner eigenen Keyfunc – in der Reproduktion eine Schlüsselsuche per `kid`, die nichts gefunden hat. Das Token wurde weder geprüft noch inhaltlich abgelehnt.
Warum der Fehler auftritt
Das Token nennt einen Schlüssel, den der Dienst nicht hat
häufigEinmal beim Start geladene Schlüssel veralten, sobald der Aussteller seine Schlüssel rotiert. Ein `kid` aus einer anderen Umgebung oder von einem anderen Aussteller lässt die Suche genauso ins Leere laufen.
Der Schlüsselsatz konnte nicht abgerufen werden
häufigKeyfuncs, die das JWKS bei Bedarf herunterladen, geben Netzwerkfehler (DNS, TLS, Timeouts, HTTP 404) über diesen Weg zurück. Die verpackte Meldung nennt den eigentlichen Fehler.
Es wurde keine Keyfunc übergeben
gelegentlich`jwt.Parse(token, nil)` oder eine Keyfunc-Variable, die nie initialisiert wurde. Ohne Schlüsselquelle kann golang-jwt nichts prüfen.
So behebst du den Fehler
- 1.
Keyfunc verwenden, die das JWKS aktualisiert
Eine Keyfunc auf JWKS-Basis aktualisiert die Schlüssel im Hintergrund und sobald ein unbekannter `kid` auftaucht, sodass Rotationen keine Ausfälle verursachen.
go k, err := keyfunc.NewDefaultCtx(ctx, []string{"https://issuer.example.com/.well-known/jwks.json"}) if err != nil { log.Fatalf("load JWKS: %v", err) } // Refetches the JWKS in the background and on unknown kids (rate-limited). token, err := jwt.Parse(raw, k.Keyfunc, jwt.WithValidMethods([]string{"ES256"})) - 2.
Verpackte Ursache protokollieren
`errors.Is(err, jwt.ErrTokenUnverifiable)` erkennt die Fehlerklasse; der verpackte Fehler verrät dir, ob die Suche ins Leere ging oder der Abruf fehlgeschlagen ist.
go if errors.Is(err, jwt.ErrTokenUnverifiable) { // The wrapped error is whatever your Keyfunc returned: log it, answer 401. log.Printf("cannot verify token: %v", errors.Unwrap(err)) }