Сессии вместо JWT: как мы защитили trend-analysis без сложности

Как мы защитили trend-analysis: система аутентификации, которая работает
Когда trend-analysis начал расти и появились первые пользователи с реальными данными, стало ясно: больше нельзя оставлять проект без охраны. Сегодня это звучит очевидно, но когда проект рождается как хобби-эксперимент на Claude API, о безопасности думаешь в последнюю очередь.
Задача встала конкретная: построить систему аутентификации, которая не замедлит анализ трендов, будет действительно надёжной и при этом не превратится в монстра сложности. Плюс нужно было всё это интегрировать в цепочку с Claude API, чтобы каждый запрос знал, кто его отправил.
Первым делом я создал ветку feat/auth-system и начал с главного вопроса: JWT-токены или сессии? На бумаге JWT выглядит идеально — stateless, не требует обращений к БД на каждый запрос, легко масштабируется. Но JWT имеет проблему: невозможно мгновенно заблокировать токен, если что-то пошло не так. Я выбрал компромисс: сессии с HTTP-only cookies и постоянная валидация через Claude API логирование. Это скучнее, чем блеск JWT, но безопаснее и практичнее.
Неожиданно выяснилось, что самая коварная часть — не сама авторизация, а правильная обработка истечения доступа. Пользователь кликает кнопку, а его сессия уже протухла. Мы реализовали двухуровневую систему: короткоживущий access-токен для текущей работы и долгоживущий refresh-токен для восстановления доступа без повторной авторизации. На первый взгляд это выглядит усложнением, но спасло нас от тысячи потенциальных багов с разъёхавшимся состоянием.
Интересный момент, о котором забывают: timing-атаки. Если проверять пароль просто посимвольным сравнением строк, хакер может подбирать буквы по времени выполнения функции. Я использовал werkzeug.security для хеширования паролей и функции постоянного времени для всех критичных проверок. Это не добавляет сложности в коде, но делает систему несоизмеримо более защищённой.
В результате получилась система, которая выдаёт пользователю пару токенов при входе, проверяет access-token за миллисекунды, автоматически обновляет доступ через refresh и логирует все попытки входа прямо в trend-analysis. База построена правильно, и теперь наша платформа защищена.
Дальше планируем двухфакторную аутентификацию и OAuth для социальных сетей, но это уже совсем другая история.
😄 Знаете, почему JWT-токены никогда не приходят на вечеринки? Потому что они всегда истекают в самый неподходящий момент!
Метаданные
- Session ID:
- grouped_C--projects-bot-social-publisher_20260207_1833
- Branch:
- main
- Dev Joke
- Что общего у Cloudflare и подростка? Оба непредсказуемы и требуют постоянного внимания
Часть потока:
Разработка: bot-social-publisher