Какие методы авторизации и аутентификации ты знаешь и как их тестировать?

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

Ответ

В своей работе я сталкиваюсь с различными методами аутентификации и авторизации, каждый из которых требует специфичного подхода к тестированию.

1. Аутентификация (кто ты?):

  • Basic Auth: Логин/пароль передаются в заголовке Authorization: Basic <base64>.
    • Тестирование: Проверка передачи по HTTPS (не HTTP), попытки подбора слабых паролей, реакция на некорректный base64.
  • Token-based (JWT): После логина клиент получает токен (обычно в теле ответа), который затем передает в заголовке Authorization: Bearer <token>.
    • Тестирование:
      • Проверка структуры JWT (header, payload, signature) на сайте jwt.io.
      • Попытка использовать просроченный (exp) токен.
      • Попытка модифицировать payload токена и отправить его без переподписи.
      • Проверка, что украденный токен с одного устройства не работает с другого, если есть привязка к IP/user-agent (не всегда).
  • OAuth 2.0 / OpenID Connect: Используется для делегированного доступа ("Войти через Google").
    • Тестирование: Проверка корректного flow (authorization code, implicit), проверка state-параметра на защиту от CSRF, проверка, что приложение не передает client_secret во фронтенд.

2. Авторизация (на что ты имеешь право?):

  • RBAC (Role-Based Access Control): Права определяются ролью пользователя (Admin, User, Guest).
    • Тестирование:
      # Пример теста с помощью curl
      # 1. Получить токен для пользователя 'user'
      curl -X POST /login -d '{"login":"user","pass":"..."}'
      # 2. Попытаться удалить ресурс как пользователь (должна быть 403 Forbidden)
      curl -H "Authorization: Bearer USER_TOKEN" -X DELETE /api/admin/users/123

      Проверяю, что каждая роль имеет доступ только к своим endpoint'ам и данным.

  • ABAC (Attribute-Based Access Control): Доступ определяется атрибутами (например, department = "finance" AND project = "alpha").
    • Тестирование: Создание пользователей с разными комбинациями атрибутов и проверка доступа к ресурсам. Например, может ли пользователь из отдела sales увидеть документ с атрибутом confidential=true.

Общие тесты безопасности:

  • Инъекция токенов: Попытка использовать токен от другого пользователя для доступа к его данным (IDOR-уязвимость).
  • Отсутствие bruteforce-защиты: Проверка, не блокируется ли аккаунт после N неудачных попыток входа.
  • Хранение токенов: Проверка, что токены не сохраняются в логах или localStorage без защиты (желательно использовать httpOnly cookies для refresh-токенов).

Инструменты: Для таких проверок я использую Postman (для создания коллекций с разными токенами), Burp Suite/OWASP ZAP для перехвата и модификации запросов, а также пишу небольшие скрипты на Python для автоматизации проверок RBAC/ABAC.