Saltar al contenido
ecdsa.com
PyJWT (Python)Bibliotecas de JWT

Mensaje de error

Signature has expired

PyJWT (Python) — jwt.exceptions.ExpiredSignatureError

Qué significa

El claim (declaración) exp del token es anterior a la hora actual del verificador, así que PyJWT lo rechazó después de una comprobación de la firma (conceptualmente) correcta. El mensaje induce un poco a error: la firma en sí no caduca; lo que se ha cerrado es la ventana de validez del token.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Absorber un desfase pequeño con leeway

    El parámetro leeway (en segundos) se aplica a las comprobaciones de exp y nbf. Usa como mucho unas decenas de segundos; los valores mayores alargan en silencio la vida útil de los tokens.

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

    Inspeccionar las marcas de tiempo reales

    Lee los claims sin verificación y compara exp con el reloj del host: el tamaño de la diferencia te dice si se trata de una caducidad, de un desfase o de un error en la emisión.

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

Errores relacionados

Explorar toda la base de datos de errores de firma