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

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

The specified alg value is not allowed

Также выводится как

  • jwt.exceptions.InvalidAlgorithmError: The specified alg value is not allowed

PyJWT (Python) — jwt.exceptions.InvalidAlgorithmError

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

Значения `alg` из заголовка токена нет в списке `algorithms`, который вы передали в `jwt.decode()`. PyJWT проверяет это до проверки подписи, потому что заголовок задаётся тем, кто создал токен, и не должен определять, как этот токен проверяется. Токен может быть подписан правильно — просто алгоритмом, который вы не разрешили.

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

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

  1. 1.

    Сначала прочитайте заголовок

    `jwt.get_unverified_header()` показывает `alg` и `kid`, ничему не доверяя. Сравните заголовок со своим списком разрешённых алгоритмов и с ключами, которые публикует ваш издатель.

    python
    print(jwt.get_unverified_header(token))  # {'alg': 'ES256', 'kid': '...', 'typ': 'JWT'}
  2. 2.

    Разрешите ровно тот алгоритм, который использует издатель

    Укажите в `algorithms` алгоритм, который использует ваш издатель, а ключи берите из его JWKS. Во время перехода перечислите оба алгоритма, каждый из которых сопоставлен со своим ключом по `kid`.

    python
    from jwt import PyJWKClient
    
    jwks = PyJWKClient("https://issuer.example.com/.well-known/jwks.json")
    signing_key = jwks.get_signing_key_from_jwt(token)
    claims = jwt.decode(
        token,
        signing_key.key,
        algorithms=["ES256"],  # the algorithm(s) your issuer actually uses, never the token's own header
        audience="https://api.example.com",
    )

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

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