Перейти к содержимому
ecdsa.com
ruby-jwt (Ruby)Ruby

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

Expected a different algorithm (JWT::IncorrectAlgorithm)

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

  • JWT::IncorrectAlgorithm: Expected a different algorithm

ruby-jwt (Ruby) — JWT::IncorrectAlgorithm from JWT.decode

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

Алгоритма из заголовка `alg` токена нет среди разрешённых вами, а если параметр `algorithm:`/`algorithms:` вообще не передан, ruby-jwt не разрешает ни одного. Начиная с ruby-jwt 2.x проверяющая сторона должна явно указать алгоритм: доверие к заголовку самого токена лежит в основе известных атак с подменой алгоритма. Подпись не проверялась.

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

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

  1. 1.

    Явно укажите алгоритм издателя

    Передайте `algorithm:` (или `algorithms:` для короткого списка). Если алгоритмов несколько, используйте загрузчик JWKS, чтобы каждый токен проверялся ключом подходящего типа.

    ruby
    payload, header = JWT.decode(token, public_key, true, algorithm: "ES256")
    # several allowed algorithms (e.g. during a migration), each matched to the right key type:
    payload, header = JWT.decode(token, nil, true, algorithms: ["ES256", "RS256"], jwks: jwks_loader)

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

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