Как была реализована авторизация в REST API на вашем проекте?

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

Ответ

Основным механизмом авторизации для REST API был JWT (JSON Web Token) по схеме Bearer Token.

Процесс аутентификации и авторизации:

  1. Логин: Клиент отправляет учетные данные (например, логин/пароль) на эндпоинт /auth/login.
  2. Выдача токенов: Сервер проверяет данные и возвращает два токена в теле ответа:
    {
      "access_token": "eyJhbGciOiJIUzI1NiIs...",
      "refresh_token": "eyJhbGciOiJIUzI1NiIs...",
      "expires_in": 3600
    }
  3. Доступ к API: Клиент использует access_token для вызова защищенных эндпоинтов, добавляя его в заголовок Authorization:
    GET /api/users/me HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
  4. Валидация: Сервер проверяет подпись токена, его срок действия (exp) и, при необходимости, claims (например, роль пользователя).
  5. Обновление токена: По истечении срока access_token клиент использует refresh_token на эндпоинте /auth/refresh для получения новой пары токенов без повторного ввода пароля.

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

  • Позитивные сценарии: Успешный доступ к ресурсам с валидным токеном.
  • Негативные сценарии:
    • Запросы без заголовка Authorization (должна быть ошибка 401 Unauthorized).
    • Запросы с истекшим или невалидным токеном (ошибка 401 или 403 Forbidden).
    • Попытки доступа к ресурсам, не входящим в роль пользователя (ошибка 403).
    • Использование refresh_token после его отзыва или истечения срока.
  • Безопасность: Токены должны передаваться по HTTPS, refresh_token хранится безопасно на клиенте.