Aller au contenu
ecdsa.com
PyJWT (Python)Bibliothèques JWT

Message d’erreur

Signature has expired

PyJWT (Python) — jwt.exceptions.ExpiredSignatureError

Ce que cela signifie

Le claim exp du jeton est antérieur à l’heure actuelle du vérificateur : PyJWT l’a donc rejeté après une vérification de signature réussie (du moins conceptuellement). Le message est légèrement trompeur : ce n’est pas la signature elle-même qui expire, c’est la fenêtre de validité du jeton qui s’est refermée.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Absorber un faible décalage avec leeway

    Le paramètre leeway (en secondes) s’applique aux vérifications des claims exp et nbf. Utilisez quelques dizaines de secondes au maximum ; des valeurs plus élevées prolongent discrètement la durée de vie des jetons.

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

    Examiner les horodatages réels

    Lisez les claims sans vérification et comparez exp à l’horloge de l’hôte : l’ampleur de l’écart vous indique s’il s’agit d’une expiration, d’un décalage d’horloge ou d’un bug à l’émission.

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

Erreurs associées

Parcourir toute la base de données des erreurs de signature