Pular para o conteúdo
ecdsa.com
PyJWT (Python)Bibliotecas de JWT

Mensagem de erro

Signature has expired

PyJWT (Python) — jwt.exceptions.ExpiredSignatureError

O que significa

A claim exp do token é anterior à hora atual do verificador, por isso o PyJWT o rejeitou depois de uma verificação de assinatura (conceitualmente) bem-sucedida. A mensagem engana um pouco — a assinatura em si não expira; o que se encerrou foi a janela de validade do token.

Por que acontece

Como corrigir

  1. 1.

    Absorver pequenos desvios de relógio com leeway

    O parâmetro leeway (em segundos) vale para as verificações de exp e nbf. Use no máximo algumas dezenas de segundos; valores maiores estendem silenciosamente o tempo de vida dos tokens.

    python
    import jwt
    
    payload = jwt.decode(
        token, key,
        algorithms=["ES256"],
        leeway=30,   # seconds of tolerated clock skew
    )
  2. 2.

    Inspecionar os timestamps reais

    Leia as claims sem verificação e compare o exp com o relógio do host — o tamanho da diferença mostra se é expiração, desvio de relógio ou um bug na emissão.

    python
    import jwt, time
    claims = jwt.decode(token, options={"verify_signature": False})
    print("exp:", claims["exp"], "now:", int(time.time()),
          "delta:", int(time.time()) - claims["exp"], "s")

Erros relacionados

Ver toda a base de erros de assinatura