1.6 KiB
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 (настроен)