Как тестировать авторизацию с использованием токенов (например, JWT)?

«Как тестировать авторизацию с использованием токенов (например, JWT)?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование токенов авторизации фокусируется на корректности их жизненного цикла и безопасности.

Основные сценарии для проверки:

  1. Получение токена:

    • Успешный запрос с валидными учетными данными возвращает access_token (и часто refresh_token).
    • Неуспешный запрос с неверными данными возвращает соответствующую ошибку (например, 401 Unauthorized).
  2. Использование access token:

    • Запрос к защищенному эндпоинту с валидным токеном в заголовке Authorization: Bearer <token> успешен (200 OK).
    • Запрос без токена или с неверным/искаженным токеном возвращает 401.
  3. Истечение срока действия (expiration):

    • Запрос с просроченным access_token возвращает 401. Система должна требовать обновления токена или повторной аутентификации.
  4. Обновление токена (Refresh Flow):

    • Отправка валидного refresh_token на соответствующий эндпоинт возвращает новый access_token.
    • Использование одноразового refresh_token второй раз должно завершаться ошибкой.
  5. Безопасность:

    • Хранение: Проверить, что токен не передается в URL (GET-параметры) и не логируется. Для веб-приложений предпочтительно хранить в httpOnly куках.
    • Валидация: Сервер должен проверять подпись токена (для JWT). Попытка использовать токен с измененной подписью ("alg": "none" или поддельный signature) должна блокироваться.

Пример запроса с токеном в Postman/cURL:

# Получение токена
curl -X POST https://api.example.com/auth/login 
  -H "Content-Type: application/json" 
  -d '{"username":"user","password":"pass"}'

# Использование токена для доступа к данным
curl -X GET https://api.example.com/api/profile 
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."