← Усі статті

JWT у Node.js: п'ять помилок, що ламають API

Base64 — не шифрування, alg=none, слабкий secret і refresh без ротації: чеклист перед продом JWT-авторизації.

JWT у Node.js: п'ять помилок, що ламають API
Зміст

Коротко

JWT у Node.js часто роблять «за туторіалом»: дані в payload, довгий TTL і Base64 як «шифрування». На Dev.to — типові помилки від PII в payload до refresh без ротації та схема access + refresh.

Що сталося

Реальний кейс: розробник поклав CPF і хеш пароля в JWT. JWT — підпис, не шифрування; payload читає кожен, хто має токен.

П'ять провалів: секрети в payload, alg: none, слабкий secret, без exp, без aud/iss у мультисервісі. Refresh — у БД, з ротацією та family ID для відкликання.

Чому це важливо

Помилки JWT рідко видно в unit-тестах; їх знаходять pentest або витік логів. Refresh без ротації = довгоживучий ключ до акаунта.

На практиці

  1. Access 5–15 хв; refresh у httpOnly cookie.
  2. Явний allowlist алгоритмів у verify.
  3. Payload без паролів і PII.
  4. Одноразовий refresh + revoke family при повторному use.

Підсумок

JWT працює як stateless bearer лише з дисципліною: короткий access, ротація refresh, жодних секретів у payload.