Skip to content

sogorich/reeltrun-auth

Repository files navigation

🛡 Сервис аутентификации и авторизации.

Система основана на протоколе OAuth2.0 с реализацией потока паролей (password flow), обеспечивающие взаимодействие с клиентскими службами через Json Web Tokens (JWT).

Ключевые моменты системы

  1. Создание аккаунта;
  2. Аутентификация и авторизация;
  3. Изменение персональных данных аккаунта;
  4. Изменение пароля от аккаунта;
  5. Удаление аккаунта;
  6. Механизм формирования, верификации и принудительного отзыва токенов;
  7. Фиксация активных сессий пользователя;
  8. Крон-задачи, для удаления просроченных зафиксированных сессий. (по умолчанию удаление происходит каждый день в 03:00 по UTC);
  9. Организация логирования приложения, в том числе предотвращение внештатных ситуаций, возникающих при необработанных серверных ошибках.

Начало работы

Перед началом использования сервиса необходимо применить миграции и установить зависимости.

Выполните следующие команды:

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 приложение.

Group 6