Перейти к содержимому
ecdsa.com
golang-jwt/jwt (Go)Go

Сообщение об ошибке

token is unverifiable: error while executing keyfunc: kid "2026-10" not found in key set

Также выводится как

  • token is unverifiable: error while executing keyfunc
  • token is unverifiable: no keyfunc was provided

Текст после «error while executing keyfunc:» — это то, что вернула ваша Keyfunc. Вызов `jwt.Parse` с Keyfunc, равной nil, даёт «token is unverifiable: no keyfunc was provided».

golang-jwt/jwt (Go) — jwt.ErrTokenUnverifiable wrapping the error your Keyfunc returned

Что это означает

golang-jwt не смог получить ключ для проверки токена: ваша `Keyfunc` вернула ошибку, и golang-jwt обернул её в `ErrTokenUnverifiable` («error while executing keyfunc: …»). Всё, что следует за этим префиксом, — сообщение вашей собственной Keyfunc; в нашем воспроизведении это поиск ключа по `kid`, который ничего не нашёл. Токен не был ни проверен, ни отклонён по существу.

Почему это происходит

Как исправить

  1. 1.

    Используйте Keyfunc с обновляемым JWKS

    Keyfunc на основе JWKS обновляет ключи в фоне и при появлении неизвестного `kid`, поэтому ротация ключей не приводит к сбоям в работе сервиса.

    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. 2.

    Записывайте в лог обёрнутую причину

    `errors.Is(err, jwt.ErrTokenUnverifiable)` определяет класс ошибки, а обёрнутая ошибка подскажет, что случилось: ключ не нашёлся при поиске или набор ключей не удалось загрузить.

    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))
    }

Связанные ошибки

Открыть всю базу ошибок подписей