Zum Inhalt springen
ecdsa.com
PyJWT (Python)JWT-Bibliotheken

Fehlermeldung

The token is not yet valid (iat)

Auch ausgegeben als

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

Der Claim in Klammern ist `iat` oder `nbf`. PyJWT 2.0–2.5 akzeptierte ein `iat` in der Zukunft; seit 2.6.0 wird es abgelehnt, sodass ein Upgrade von einer alten Version eine Uhrenabweichung zutage fördern kann, die schon die ganze Zeit bestand.

PyJWT (Python) — jwt.exceptions.ImmatureSignatureError

Was der Fehler bedeutet

`ImmatureSignatureError` von PyJWT: `iat` (ausgestellt am) oder `nbf` (nicht vor) des Tokens liegt nach der aktuellen Zeit der prüfenden Seite. Der Name in Klammern verrät, um welchen Claim es geht. PyJWT lehnt Tokens ab, die „in der Zukunft“ ausgestellt wurden, weil ein korrekt arbeitender Aussteller kein solches Token erzeugen kann; in der Praxis heißt das fast immer, dass die Uhr des Ausstellers gegenüber deiner vorgeht.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Kleine Toleranz zulassen

    `leeway` (Sekunden oder ein `timedelta`) toleriert Uhrenabweichungen bei `exp`, `nbf` und `iat`. Bleib bei einigen Dutzend Sekunden und korrigiere die abweichende Uhr per NTP.

    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.

    Abweichung messen

    Gib jeden Zeit-Claim relativ zur lokalen Uhr aus. Ein kleiner positiver Wert bei `iat` bedeutet eine Uhrenabweichung, ein riesiger einen Einheitenfehler beim Aussteller.

    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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen