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

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

"alg" (Algorithm) Header Parameter value not allowed

jose (JavaScript) — JOSEAlgNotAllowed, code ERR_JOSE_ALG_NOT_ALLOWED

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

Заголовок alg токена указывает алгоритм, которого нет в списке разрешённых алгоритмов (параметр algorithms), переданном в jwtVerify. jose отклоняет токен ещё до того, как выполняется какая-либо криптография. Это сделано намеренно: заголовок alg — входные данные, которые контролирует атакующий, и выбирать алгоритм должна проверяющая сторона, а не токен.

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

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

  1. 1.

    Согласуйте список разрешённых алгоритмов, ключ и конфигурацию издателя

    Посмотрите на заголовок и приведите все три в соответствие. На время миграции принимайте оба алгоритма, каждый со своим ключом, который выбирается по kid из JWKS.

    js
    import { decodeProtectedHeader, jwtVerify } from "jose";
    
    console.log(decodeProtectedHeader(token)); // { alg: "ES256", kid: "..." }
    await jwtVerify(token, jwks, { algorithms: ["ES256"] });
  2. 2.

    Держите список разрешённых алгоритмов как можно короче

    Не «исправляйте» эту ошибку, перечисляя все алгоритмы подряд. Безопасное итоговое состояние — одно значение на каждый тип токена; то же самое говорит RFC 8725 (JWT Best Current Practices).

    js
    // good: exactly what your issuer signs with
    { algorithms: ["ES256"] }
    // bad: defeats the protection this error provides
    { algorithms: ["ES256", "RS256", "HS256", "PS256"] }

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

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