Что это такое?
JWT это компактный и безопасный способ передачи информации между участниками. Чаще всего применяется для аутентификации и авторизации в API.
Структура токена
JWT состоит из трёх частей, разделённых точками:
Header.Payload.SignatureПример:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjMsImFkbWluIjp0cnVlfQ.sQ9e2RW7m8Jxv-cMcwBzNnSGNTHsIHoTPkWa-dkgOP4
1. Header - метаинформация:
{
"alg": "HS256",
"typ": "JWT"
}2. Payload - полезная нагрузка:
{
"user_id": 123,
"admin": true,
"exp": 1725650000
}3. Signature - цифровая подпись:
Подписывается секретным ключом или приватным RSA-ключом.
Где используется
▫️Авторизация: Authorization: Bearer <токен>
▫️Обновление сессии через refresh token
▫️API-тесты в Postman, curl, автотестах
Преимущества
▫️Stateless - сервер не хранит сессии
▫️Удобен в API-авторизации
▫️Быстрая проверка токена
⚠️ Что важно проверить QA-инженеру
▫️Срок действия (exp)
▫️Просроченный токен → 401 Unauthorized
▫️Проверьте реакцию API при истечении срока
▫️Payload не зашифрован
▫️Любой может его прочитать
▫️Убедитесь, что в Payload нет паролей, токенов и личных данных
▫️Подпись токена
▫️Проверьте, что сервер её проверяет
▫️Подмена alg: none не должна быть допустима
▫️Доступ по ролям
▫️Пользователь не должен получить доступ к чужим данным
▫️Подмена Payload не должна менять права доступа
Поведение API:
▫️Без токена → 401
▫️С некорректным токеном → 401 или 403
🛠 Инструменты
▫️ jwt.io - удобный декодер и проверка подписи
▫️Postman - вставка токена в Authorization
▫️Charles/Burp - перехват токена, проверка подмены
Автор: Vladlen Tsiganenko