Технически

Безопасность

Эта страница — для технического читателя. Описывает реальные архитектурные решения сегодняшней беты, без маркетинговой воды.

Шифрование credentials интеграций

Токены доступа к МойСклад и будущим интеграциям шифруются на стороне сервера алгоритмом Fernet (AES-128 в режиме CBC + HMAC-SHA256, библиотека cryptography). Шифротекст хранится в колонке credentials_encrypted таблицы integration_connections.

API никогда не возвращает токен в ответах — Pydantic-схема его просто не содержит. В логах токены тоже не появляются — расшифровка происходит непосредственно перед HTTP-запросом к внешнему API и сразу освобождается.

Аутентификация и сессии

  • Пароли: хешируются прямым bcrypt (12 раундов по умолчанию). В БД лежит только хеш + соль. Длинные пароли (>72 байт) детерминированно пре-хешируются через SHA-256+base64.
  • Access-токен: JWT (HS256), TTL 24 часа, подписан серверным секретом. Содержит user_id, company_id, role.
  • Refresh-токен: отдельный JWT, TTL 7 дней. Помечен claim'ом type: refresh и не может использоваться как Bearer.

Multi-tenant изоляция

Каждая сущность — OperationalProblem, IntegrationConnection, ProblemEvent и т.д. — содержит company_id с ON DELETE CASCADE. Все запросы фильтруются по current_user.company_id в FastAPI-зависимостях. Пользователь компании A технически не может получить данные компании B — запрос вернёт 404 ещё до проверки прав доступа к ресурсу.

Чтобы не утекать через ошибки информацию о существовании чужих ресурсов, кросс-tenant обращения возвращают 404 с detail="not_found", а не 403.

Append-only audit-trail

Каждая смена статуса и ответственного по проблеме пишется в отдельную таблицу problem_events с указанием автора (user или system), времени, прежнего и нового значения. Записи не редактируются и не удаляются через интерфейс.

При удалении пользователя actor_user_id обнуляется (FK с ON DELETE SET NULL), но событие сохраняется — в UI оно отобразится как «Удалённый пользователь».

Стек

  • Backend: Python 3.12, FastAPI, SQLAlchemy 2.0, Alembic.
  • БД: PostgreSQL 16, миграции через Alembic.
  • Очередь: Celery + Redis для фоновых задач.
  • Frontend: Next.js 15, TypeScript, без бизнес-логики на клиенте.
  • Контейнеризация: Docker Compose для разработки. Production-вариант с разделением dev/prod-зависимостей готовится.

Что в плане

  • Refresh-token rotation с инвалидацией использованных.
  • Роле-ограничения mutating endpoints: viewer = read-only.
  • Cleanup старых записей в audit-логах через Celery beat.
  • Production-deployment с HTTPS, security headers, rate-limiting на /auth/login.
  • Pen-test и compliance-аудит перед коммерческим запуском.

Технические вопросы: support@glassbiz.ru. Сообщения об уязвимостях принимаем через тот же адрес — отвечаем в течение 48 часов.