Какой у вас опыт тестирования аутентификации и авторизации с использованием токенов?

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

Ответ

Есть практический опыт тестирования механизмов аутентификации на основе токенов: JWT, OAuth 2.0, API-ключи, защита от CSRF.

Ключевые аспекты тестирования:

  • Жизненный цикл токена: получение (login), использование (API calls), обновление (refresh token), отзыв (revoke).
  • Валидация: проверка подписи (signature), срока действия (exp), аудитории (aud), издателя (iss).
  • Безопасность: передача токена только по HTTPS, хранение (не в localStorage для веба), проверка прав доступа (scopes, roles).
  • Обработка ошибок: корректные HTTP-коды (401 Unauthorized, 403 Forbidden) при истечении или невалидном токене.

Рабочий процесс в Postman:

  1. Запрос на /auth/login для получения JWT.
  2. Автоматическое сохранение токена в переменные окружения.
  3. Использование токена в заголовках последующих запросов: Authorization: Bearer <token>.

Пример валидации JWT на Python (библиотека PyJWT):

import jwt
from jwt.exceptions import InvalidTokenError

def validate_jwt(token: str, secret: str) -> bool:
    """Проверяет валидность и срок действия JWT."""
    try:
        # Декодирование и верификация подписи и exp-claims
        payload = jwt.decode(
            token,
            secret,
            algorithms=["HS256"],
            options={"require": ["exp"]}
        )
        return True
    except (jwt.ExpiredSignatureError, InvalidTokenError):
        # Токен просрочен или невалиден
        return False

# Использование
is_valid = validate_jwt(user_token, "SECRET_KEY")

Тестирование включает негативные сценарии: подмена токена, атаки на повторное использование, проверка refresh_token.