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

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

It is required that you pass in a value for the "algorithms" argument when calling decode().

PyJWT (Python) — jwt.exceptions.DecodeError

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

Начиная с PyJWT 2.0, jwt.decode() отказывается работать без явно переданного списка algorithms. Это не придирка: если брать алгоритм из заголовка самого токена, становятся возможны атаки с подменой алгоритма (например, проверка токена HS256, при которой открытый ключ RSA используется как секрет HMAC). Проверяющая сторона — её настраивают на сервере, вне досягаемости атакующего — должна сама указать, что она принимает, и PyJWT закрепляет это требование на уровне API, так что небезопасную форму вызова просто невозможно написать.

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

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

  1. 1.

    Укажите алгоритм явно

    Передайте ровно тот алгоритм (или алгоритмы), который использует ваш издатель, — для токенов, подписанных ECDSA, обычно это ES256. Если через один сервис проходят токены нескольких типов, задайте для каждого издателя собственный список разрешённых алгоритмов, а не объединяйте их все в один слишком широкий список.

    python
    import jwt
    
    payload = jwt.decode(
        token,
        public_key_pem,
        algorithms=["ES256"],       # required — and a security control, not boilerplate
        audience="api://orders",
    )
  2. 2.

    Если нужен просмотр без проверки, укажите это явно

    Если нужно только прочитать утверждения (при отладке, для журналирования), отключите проверку осознанно — и никогда не используйте результат для решений об авторизации.

    python
    claims = jwt.decode(token, options={"verify_signature": False})
    # or just the header:
    header = jwt.get_unverified_header(token)

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

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