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

Message d’erreur

The token is not yet valid (iat)

Également affiché sous la forme

  • The token is not yet valid (nbf)
  • jwt.exceptions.ImmatureSignatureError: The token is not yet valid (iat)

Le claim entre parenthèses est `iat` ou `nbf`. Les versions 2.0 à 2.5 de PyJWT acceptaient un `iat` dans le futur ; la version 2.6.0 a commencé à le rejeter, si bien qu’une mise à jour depuis une ancienne version peut révéler un décalage d’horloge qui existait depuis toujours.

PyJWT (Python) — jwt.exceptions.ImmatureSignatureError

Ce que cela signifie

`ImmatureSignatureError` de PyJWT : le claim `iat` (date d’émission) ou `nbf` (pas avant) du jeton est postérieur à l’heure actuelle du vérificateur. Le nom entre parenthèses indique de quel claim il s’agit. PyJWT rejette les jetons émis « dans le futur », car un émetteur correct ne peut pas en produire ; en pratique, cela signifie presque toujours que l’horloge de l’émetteur est en avance sur la vôtre.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Accorder une faible tolérance

    `leeway` (en secondes ou sous forme de `timedelta`) tolère les écarts d’horloge pour `exp`, `nbf` et `iat`. Limitez-le à quelques dizaines de secondes, et corrigez avec NTP l’horloge qui dérive.

    python
    from datetime import timedelta
    
    claims = jwt.decode(
        token,
        signing_key,
        algorithms=["ES256"],
        audience="https://api.example.com",
        leeway=timedelta(seconds=30),  # applies to exp, nbf and iat
    )
  2. 2.

    Mesurer le décalage

    Affichez chaque claim de date par rapport à l’horloge locale. Une petite avance de `iat` indique un décalage d’horloge ; une avance énorme indique un bug d’unité chez l’émetteur.

    python
    import time
    
    c = jwt.decode(token, options={"verify_signature": False})
    now = int(time.time())
    print({k: c[k] - now for k in ("iat", "nbf", "exp") if k in c})  # seconds relative to this host

Erreurs associées

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