Перейти к содержимому
ecdsa.com
PyJWT (Python)Библиотеки JWT

Сообщение об ошибке

Signature has expired

PyJWT (Python) — jwt.exceptions.ExpiredSignatureError

Что это означает

Утверждение exp в токене указывает на момент раньше текущего времени проверяющей стороны, поэтому PyJWT отклонил токен — концептуально уже после успешной проверки подписи. Формулировка немного вводит в заблуждение: у самой подписи срока действия нет, истёк срок действия токена.

Почему это происходит

Как исправить

  1. 1.

    Сгладьте небольшое расхождение часов параметром leeway

    Параметр leeway (в секундах) действует на проверки exp и nbf. Задавайте не больше нескольких десятков секунд: большие значения незаметно продлевают срок жизни токенов.

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

    Посмотрите на фактические метки времени

    Прочитайте утверждения без проверки и сравните exp с часами хоста: по величине разницы видно, что это — истечение срока, расхождение часов или ошибка при выпуске токена.

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

Связанные ошибки

Открыть всю базу ошибок подписей