Реализация аутентификации и контроля доступа
Сегодня я реализовал систему управления доступом на основе ролей для аналитических данных в своей платформе защиты от фишинга на базе искусственного интеллекта. Целью было предоставить доступ к расширенной статистике использования только пользователям с тарифами PRO или Enterprise.
Аутентификация через API-ключи
Вместо стандартной системы токеновой аутентификации Django Rest Framework была создана кастомная система аутентификации:
class APIKeyAuthentication(BaseAuthentication):
# Логика чтения ключа из заголовка запроса и привязка его к запросу
Ключевое правило при реализации аутентификации заключается в том, что она должна быть свободна от побочных эффектов, то есть не обновлять базу данных внутри метода authenticate().
Проверка разрешений
Для обеспечения безопасности был создан класс проверки прав доступа:
class ProPlanOnly(BasePermission):
def has_permission(self, request, view):
api_key = getattr(request, "api_key", None)
if not api_key or not api_key.is_active():
return False
plan = api_key.plan
return plan in ["pro", "enterprise"]
Эта проверка четко разделяет задачи аутентификации («Кто вы?») и авторизации («Разрешено ли вам здесь находиться?»).
Система отслеживания использования
Теперь каждый запрос регистрируется со следующими данными:
- конечная точка;
- метод HTTP-запроса;
- статус-код ответа;
- временная метка;
- ссылка на используемый API-key. Это позволяет собирать важные метрики для дальнейшего анализа поведения пользователей платформы.
Архитектура уровней доступа
Платформа теперь поддерживает три уровня доступа:
- Анонимный – ограниченный базовый доступ;
- Бесплатный – возможность проведения анализа с трекингом запросов;
- PRO – полный анализ плюс доступ к аналитике.
Таким образом проект постепенно превращается из демонстрационного решения в полноценную коммерческую платформу кибербезопасности.