Pular para o conteúdo
ecdsa.com
jose (JavaScript)Bibliotecas de JWT

Mensagem de erro

Invalid Compact JWS

jose (JavaScript) — JWSInvalid, code ERR_JWS_INVALID

O que significa

A biblioteca jose não conseguiu dividir a entrada nos três segmentos separados por pontos da serialização compacta do JWS (cabeçalho.payload.assinatura). A string que você passou não tem a estrutura de um token assinado; nenhuma operação criptográfica foi tentada. É o equivalente, no jose, do “jwt malformed” do jsonwebtoken — e, como aquele erro, indica que o problema está antes da biblioteca de JWT, em quem gerou ou transportou a string.

Por que acontece

Como corrigir

  1. 1.

    Limpar a entrada e conferir o número de segmentos

    Remova espaços, retire o esquema e confira o número de segmentos antes de chamar o jose — assim você obtém erros precisos no nível da aplicação em vez de uma falha genérica de análise.

    js
    const token = raw.replace(/^Bearer\s+/i, "").trim();
    const segments = token.split(".").length;
    if (segments !== 3) throw new Error(`expected JWS (3 segments), got ${segments}`);
  2. 2.

    Encaminhar tokens JWE para a descriptografia

    Se houver cinco segmentos, o token está criptografado. Use jwtDecrypt com a chave privada do destinatário em vez de jwtVerify.

    js
    import { jwtDecrypt } from "jose";
    
    const { payload } = await jwtDecrypt(token, privateKey); // 5-segment JWE
  3. 3.

    Rastrear onde a string foi montada

    Se um valor já limpo ainda falhar, registre no log o tamanho e os primeiros caracteres dele em cada etapa — cliente, gateway, armazenamento, handler. O primeiro segmento de um JWT assinado é JSON em base64url, então tokens reais começam com “eyJ” (a codificação de '{"'); a etapa em que isso deixa de ser verdade é onde a corrupção acontece.

    js
    console.log(token.length, JSON.stringify(token.slice(0, 12)));
    // healthy: 300+ 'eyJhbGciOiJF'

Erros relacionados

Ver toda a base de erros de assinatura