Pular para o conteúdo
ecdsa.com
golang-jwt/jwt (Go)Go

Mensagem de erro

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

Também aparece como

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

O texto depois de “error while executing keyfunc:” é o que seu Keyfunc retornou. Chamar `jwt.Parse` com um Keyfunc nil gera “token is unverifiable: no keyfunc was provided”.

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

O que significa

O golang-jwt não conseguiu obter uma chave para verificar o token: seu `Keyfunc` retornou um erro, e o golang-jwt o encapsulou como `ErrTokenUnverifiable` (“error while executing keyfunc: …”). Tudo o que vem depois desse prefixo é a mensagem do seu próprio Keyfunc — na reprodução, uma busca de chave pelo `kid` que não encontrou nada. O token não foi verificado nem rejeitado com base no próprio conteúdo.

Por que acontece

Como corrigir

  1. 1.

    Usar um Keyfunc de JWKS que se atualiza

    Um Keyfunc baseado em JWKS atualiza as chaves em segundo plano e sempre que aparece um `kid` desconhecido, de modo que as rotações não causam interrupções.

    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.

    Registrar no log a causa encapsulada

    `errors.Is(err, jwt.ErrTokenUnverifiable)` identifica a classe do erro; o erro encapsulado diz se foi uma chave não encontrada na busca ou uma falha ao baixar as chaves.

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

Erros relacionados

Ver toda a base de erros de assinatura