Перейти к содержимому

Аутентификация

Назначение

Безопасный вход в систему, управление сессиями, контроль доступа. Все запросы (кроме публичных) проходят JWT-проверку. Модуль реагирует на кадровые события — при увольнении или смене пароля автоматически инвалидирует сессии.


Сценарии

Вход в систему

Актор: Сотрудник, управляющий, администратор

  1. Пользователь отправляет логин + пароль (POST /auth/login)
  2. Система проверяет существование пользователя
  3. Сверяет пароль (bcrypt, с защитой от timing-атак — сравнение выполняется даже при отсутствии пользователя)
  4. Проверяет: пользователь активен, не терминальный
  5. Создаёт сессию с refresh-токеном (срок жизни — 30 дней), сохраняет IP + User-Agent
  6. Возвращает пару: access-токен (короткоживущий) + refresh-токен

Ограничения:

  • Rate limit: 5 запросов в минуту
  • Деактивированный пользователь не может войти
  • Терминальный аккаунт (POS) не может войти через стандартный логин
  • Допускается несколько одновременных сессий (разные устройства)

Обновление токена

  1. Клиент отправляет refresh-токен (POST /auth/refresh)
  2. Проверяется валидность
  3. Старая сессия удаляется, создаётся новая
  4. Возвращается новая пара токенов

Rate limit: 10 запросов в минуту

Выход

Пользователь вызывает POST /auth/logout — текущая сессия удаляется.

Принудительный выход (автоматический)

Триггер: Доменные события employee-dismissed или employee-credentials-updated из модуля Кадры.

Система удаляет все сессии пользователя → пользователь вынужден перелогиниться (или не может, если уволен).


Типы пользователей

ТипДоступМожет логинитьсяПривязан к корпорации
АдминистраторВсе корпорацииДаНет
Обычный пользовательТолько своя корпорацияДаДа (через сотрудника)
ТерминальныйТолько API-доступНетДа

Автоматизация

ПроцессРасписаниеДействие
Очистка сессийЕжедневно в 3:00Удаление сессий старше 30 дней

Связи с другими контекстами

НаправлениеТипОписание
Кадры → АутентификацияСобытиеУвольнение / смена пароля → инвалидация всех сессий
Аутентификация → все модулиGuardGlobalJwtAuthGuard проверяет JWT, CorporationGuard проверяет corporationId

Сущности

Пользователь (User)

ПолеОписание
idUUID
loginУникальный идентификатор для входа
passwordHashХеш пароля (bcrypt)
pinPIN-код (альтернативный вход для POS)
isActiveАктивен ли аккаунт
isAdminДоступ ко всем корпорациям
isTerminalТехнический аккаунт POS-терминала

Сессия (Session)

ПолеОписание
idUUID
userIdСсылка на пользователя
refreshTokenТокен для обновления доступа
expiresAtДата истечения
userAgentИнформация об устройстве
ipAddressIP-адрес при входе