Pular para o conteúdo
ecdsa.com
jsonwebtoken (Node.js)Bibliotecas de JWT

Mensagem de erro

invalid algorithm

O que significa

O valor do cabeçalho alg do token não está na lista de algoritmos que seu verificador aceita. O jsonwebtoken verifica isso antes de mexer na assinatura, então o token pode estar perfeitamente assinado — só que com um esquema que você não permitiu. Essa barreira é um recurso de segurança funcionando como projetado, e não um bug de análise.

Por que acontece

Como corrigir

  1. 1.

    Fixar a lista de algoritmos permitidos no que o emissor realmente usa

    Decodifique o cabeçalho para ver o alg real e defina a lista de algoritmos permitidos exatamente com esse valor — e confirme que o tipo da chave corresponde (chave EC para ES256, chave RSA para RS256).

    js
    const { header } = jwt.decode(token, { complete: true });
    console.log(header.alg); // e.g. "ES256"
    
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });
  2. 2.

    Implantar mudanças de algoritmo em duas fases

    Durante uma rotação de chave ou de algoritmo, os verificadores precisam aceitar os dois esquemas por um curto período — cada um vinculado à própria chave pelo kid — e depois voltar a aceitar apenas um.

    js
    // transition window only:
    jwt.verify(token, keyForKid(header.kid), { algorithms: ["ES256", "RS256"] });
    // after all RS256 tokens expired:
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });

Erros relacionados

Ver toda a base de erros de assinatura