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

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

invalid algorithm

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

Значения заголовка alg токена нет в списке алгоритмов, которые принимает ваш код проверки. jsonwebtoken проверяет это ещё до работы с подписью, поэтому токен может быть подписан совершенно правильно — просто схемой, которую вы не разрешили. Этот барьер — защитный механизм, который работает так, как задумано, а не ошибка разбора.

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

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

  1. 1.

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

    Декодируйте заголовок, чтобы увидеть фактический alg, затем впишите в список разрешённых алгоритмов ровно это значение — и убедитесь, что тип ключа подходит (ключ EC для ES256, ключ RSA для RS256).

    js
    const { header } = jwt.decode(token, { complete: true });
    console.log(header.alg); // e.g. "ES256"
    
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });
  2. 2.

    Выкатывайте смену алгоритма в два этапа

    Во время ротации ключа или алгоритма проверяющие стороны должны недолго принимать обе схемы, каждую со своим ключом, привязанным через kid, а затем снова оставить одну.

    js
    // transition window only:
    jwt.verify(token, keyForKid(header.kid), { algorithms: ["ES256", "RS256"] });
    // after all RS256 tokens expired:
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });

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

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