Коротка відповідь
middleJWT — це JSON Web Token, який використовується для безпечної передачі інформації між сторонами у вигляді підписаного JSON‑об’єкта.
Повне пояснення
JWT (JSON Web Token) – це компактний, самодостатній токен, що містить закодовані дані (payload) і підпис, який гарантує цілісність та автентичність. Токен складається з трьох частин, розділених крапками: заголовок (header), дані (payload) і підпис (signature). Заголовок містить тип токена та алгоритм підпису, наприклад HS256 або RS256. Payload містить claims – заяви про користувача чи контекст, наприклад sub, exp, iat. Підпис формується за допомогою секретного ключа (HS) або приватного ключа RSA/ECDSA (RS/ES).
Коли застосовувати? JWT часто використовується в REST‑API для аутентифікації та авторизації: клієнт отримує токен після логіну, а потім передає його в заголовку Authorization: Bearer <token> при кожному запиті. Токен самодостатній, тому сервер не зберігає сесію.
Переваги:
- Stateless: сервер не зберігає стан, що полегшує масштабування.
- Підтримка різних алгоритмів підпису, включаючи асиметричні ключі.
- Можливість додавати власні claims.
Недоліки:
- Токен не можна «скасувати» без додаткової логіки (наприклад, blacklist).
- Якщо токен потрапляє в руки зловмисника, він може використовувати його до закінчення терміну дії.
Практика:
import jwt from 'jsonwebtoken';
const token = jwt.sign({ sub: user.id }, process.env.JWT_SECRET, { expiresIn: '1h' });
Тестування: у Jest можна перевірити, що токен містить очікувані claims:
const decoded = jwt.verify(token, process.env.JWT_SECRET);
expect(decoded.sub).toBe(user.id);
Безпека:
- Використовувати HTTPS, щоб захистити токен під час передачі.
- Обмежувати
expдо мінімально необхідного часу. - Зберігати секретний ключ у безпечному сховищі (наприклад, Vault).
- При потребі анулювання токенів реалізувати blacklist або short‑lived refresh tokens.