🛡 Сервис аутентификации и авторизации.
Система основана на протоколе OAuth2.0 с реализацией потока паролей (password flow), обеспечивающие взаимодействие с клиентскими службами через Json Web Tokens (JWT).
Ключевые моменты системы
- Создание аккаунта;
- Аутентификация и авторизация;
- Изменение персональных данных аккаунта;
- Изменение пароля от аккаунта;
- Удаление аккаунта;
- Механизм формирования, верификации и принудительного отзыва токенов;
- Фиксация активных сессий пользователя;
- Крон-задачи, для удаления просроченных зафиксированных сессий. (по умолчанию удаление происходит каждый день в 03:00 по UTC);
- Организация логирования приложения, в том числе предотвращение внештатных ситуаций, возникающих при необработанных серверных ошибках.
Перед началом использования сервиса необходимо применить миграции и установить зависимости.
Выполните следующие команды:
pip install -r ./requirements.txt
aerich init -t database.option.TORTOISE_ORM
aerich init-db
aerich migrate
aerich upgrade
Если нужно сбросить миграции:
Удалите базу данных и директорию с миграциями
aerich init-db
Создайте файлы dev.env и prod.env со следующим содержимым
# OpenAPI OPENAPI_URL="/openapi.json" REDOC_URL="/redoc" DOCS_URL="/docs" # JWT ACCESS_TOKEN_LIFETIME=15 # in minutes REFRESH_TOKEN_LIFETIME=21 # in days # Crypto SECRET_KEY="ВАШ_СЕКРЕТНЫЙ_КЛЮЧ" BASE_HASH_ALGORITHM="HS256" # Database DATABASE_DSN="sqlite://db.sqlite3" # CORS CORS_ORIGINS="http://127.0.0.1 http://127.0.0.1:8000"
*dev.env используется в дебаг-режиме.
Для Postgres установить следующий DSN в переменную DATABASE_DSN:
DATABASE_DSN="postgres://user:pass@localhost:5432/postgres"
Запуск приложения
В самостоятельном режиме:
uvicorn server:app --reload
В качестве sub-application:
app.mount("/path", auth_app)
- app: Экземпляр Вашего приложения FastAPI;
- auth_app: Экземпляр сервиса авторизации.
- Фреймворк FastAPI
- Object Relation Mapping Tortoise ORM
- Миграции Aerich
- Логирование Loguru
- Кроны aiocron
- Тесты pytest
Планируется организовать этот сервис как поставщика авторизации (identity provider), с поддержкой SSO и соответствия со спецификацией Open ID Connect — что, возможно, будет реализовано как отдельно изолированное FastAPI приложение.