Данный проект демонстрирует реализацию бэкенд-сервиса на FastAPI с использованием JWT-аутентификации (с поддержкой Basic Auth для получения токена) и ролевой модели авторизации.
-
Регистрация нового пользователя с паролем (хеширование через sha256_crypt).
-
Логин по логину и паролю (Basic Auth) с выдачей JWT-токена (время жизни — 5 минут).
-
Защищённые эндпоинты с проверкой роли через кастомный декоратор @PermissionChecker.
-
Гостевой доступ — если токен невалиден или отсутствует, пользователь автоматически получает роль guest.
-
Лимитирование запросов настраивается индивидуально для каждой роли:
- admin → 1000 запросов в минуту;
- user → 20 запросов в минуту;
- guest → 5 запросов в минуту.
git clone <url-репозитория>
cd <папка-проекта>
python -m venv venv
source venv/bin/activate # для Linux/Mac
venv\Scripts\activate # для Windows
pip install -r requirements.txt
uvicorn main:app --reload
Приложение будет доступно по адресу: http://127.0.0.1:8000
Документация Swagger UI: http://127.0.0.1:8000/docs
| Метод | URL | Доступ | Описание |
|---|---|---|---|
| POST | /registration | публичный | Создание нового пользователя |
| POST | /login | публичный | Аутентификация (Basic Auth) → получение JWT |
| GET | /admin_endpoint | admin | Пример защищённого ресурса для администраторов |
| POST | /user_endpoint | user | Пример защищённого ресурса для зарегистрированных пользователей |
| GET | /guest_endpoint | guest | Доступен всем (даже без токена) |
Основные библиотеки:
-
fastapi — веб-фреймворк
-
uvicorn — ASGI-сервер
-
pydantic — валидация данных
-
PyJWT — работа с JWT
-
passlib — хеширование паролей
-
slowapi — ограничение частоты запросов
Полный список см. в requirements.txt.