Перейти к содержанию

Главная

Определение

Аутентификационный микросервис, высокопроизводительный, легкий и готовый к использованию.

Юнит стандартизирован до спецификации OpenAPI v3 и представляет собой типичный, классический REST API.
Swagger UI является неотъемлемой частью основного кода.

Сервис обеспечивает только аутентификацию, авторизация запросов остаётся задачей основного сервиса и реализовать её предлагается на основе групп, как это принято, например, в операционных системах.

Поддерживается только JWT аутентификация по ассиметричным алгоритмам.
Предоставляется пара токенов, access & refresh.

Алгоритм работы

Предлагается следующая схема: Клиент запрашивает аутентификационный токен, получив его отправляет запросы к основному сервису, последний верифицирует полученный токен (в данном случае на публичном ключе auth сервиса, не обращась к последнему).
Если токен валиден, то основной сервис находит или не находит нужную группу в списке групп пользователя и принимает соответственное решение об авторизации запроса. Нагрузка токена содержит список групп пользователя.
Таким образом основному сервису не требуется взаимодействовать с auth юнитом, не требуется и хранить реестр пользователей у себя.

Вообще ни auth, ни основной сервис не хранят состояние пользователя - реализуется основной принцип REST API.
Любой и каждый запрос самодостаточен.

Администратор основного сервиса должен иметь учётную запись суперпользователя.

В принципе всё, как обычно, за исключением того, что запрос на аутентификацию отправляется не к своей БД, а к стороннему, доверенному сервису.

Выбор БД

# определяет тип СуБД
>>DBS_ENGINE = sqlite|postgres

Развертывание

# Клонируем репо
git clone 
cd auth-v2
cp template.env .env
# Заполняем файл с переменными окружения

если PostgreSQL:

# создаём папку для файлов БД имя папки указанной ниже
# формируется как $DBS/${POSTGRES_DB_FOLDER}${SUFFIX} 
mkdir dbs/pg-v2
# Запускаем сервер БД
docker compose up db

# собираем сервис
docker compose build api
# создаём БД и выполняем миграции
docker compose run api bash -c 'python3 staff.py alembic upgrade head'

# генерируем ключевую пару
docker compose run api sh generate-keys.sh

# запускаем АПИ
docker compose up api
# проверяем статус сервиса, например в браузере http://localhost:8000/docs

если SQLite:

# собираем сервис
docker compose build api

# генерируем ключевую пару
docker compose run api sh generate-keys.sh

# создаём БД и выполняем миграции
docker compose run api bash -c 'python3 staff.py alembic upgrade head'

# запускаем АПИ
docker compose up api
# проверяем статус сервиса, например в браузере http://localhost:8000/docs

Добавление первого суперпользователя

Первого пользователя можно добавить автоматически определив соответствующие переменные (см. template.env) или выполнив команды:

# входим в контейнер с апи
docker exec -it auth-api-v2 bash
# добавляем пользователя
python3 createsuperuser.py

Последнее обновление: 2022-09-15