Files

1.6 KiB

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

Базовые требования

  • .env — всегда в .gitignore. Никогда не коммитить.
  • JWT: HS256, access_token = 60 минут, refresh_token = 30 дней
  • Пароли: bcrypt через passlib
  • Pydantic валидация на всех входах
  • RBAC: роли user и admin (is_superuser)

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

# app/core/security.py
def create_access_token(data: dict, expires_delta: timedelta | None = None) -> str
def decode_token(token: str) -> dict[str, Any] | None
def hash_password(password: str) -> str
def verify_password(plain: str, hashed: str) -> bool

RBAC

Роль Права
user CRUD своих идей, запуск анализа
admin Управление пользователями, просмотр логов, системные настройки

Sensitive data

Никогда не логировать:

  • Пароли (даже хэш)
  • JWT токены
  • API keys и секреты
  • Email в открытом виде (только user_id)

Маскировать:

  • Email: u***@mail.ru
  • IP: 195.208.*.*

Secrets management

Окружение Где хранить
Local .env (в .gitignore)
Staging/Prod GitHub Secrets

Без Vault (< 10 разработчиков). JWT_SECRET_KEY менять при утечке или раз в год.

Запланировано

  • OAuth2 (Yandex, Google) — Authlib
  • Rate limiting — slowapi
  • CORS — FastAPI middleware (настроен)