В чем особенность JWT токена с точки зрения тестирования?

«В чем особенность JWT токена с точки зрения тестирования?» — вопрос из категории API тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для тестировщика ключевые особенности JWT (JSON Web Token) связаны с его структурой, способом проверки и типичными уязвимостями.

Особенности, важные для тестирования:

  1. Самодостаточность (Stateless): Серверу не нужно хранить токен в сессии. Он проверяет его подпись и декодирует данные из payload. Тесты должны проверять, что сервер корректно валидирует подпись, а не доверяет данным из незашифрованной части токена.
  2. Структура из трех частей: Header.Payload.Signature. Полезная нагрузка (Payload) в кодировке Base64Url может быть легко просмотрена, но не должна содержать конфиденциальных данных.
  3. Проверка подписи: Безопасность зависит от алгоритма подписи (например, HS256, RS256). Неправильная реализация на стороне сервера — частый источник уязвимостей.

Типичные сценарии тестирования безопасности JWT:

  • Подмена алгоритма подписи (alg: none): Попытка отправить токен с алгоритмом none, чтобы обойти проверку подписи.
  • Подбор ключа подписи (HS256): Для симметричных алгоритмов, если секрет слабый или утечек.
  • Просроченные токены: Проверка, что токены с истекшим сроком (exp) отклоняются.
  • Неверная аудитория (aud): Проверка, что токен, выданный для одного сервиса, не принимается другим.

Пример проверки в тестах (используя инструменты вроде Burp Suite или Postman):

  1. Декодируйте токен на сайте вроде jwt.io, чтобы увидеть его содержимое.
  2. Попробуйте изменить payload (например, поле role с user на admin), не меняя подпись, и отправить запрос — сервер должен отвергнуть такой токен.
  3. Проверьте реакцию API на просроченный, поврежденный или отсутствующий токен (ожидаются коды ответа 401 или 403).