Skip to content

Модуль Core (Аутентификация, Пользователи, KYC)

Обзор

Модуль Core является фундаментальным модулем платформы IWM, отвечающим за управление идентификацией, аутентификацию, авторизацию и верификацию KYC (Know Your Customer). Все остальные модули зависят от Core для идентификации пользователей и контроля доступа.

Зоны ответственности

  • Регистрация пользователей и управление аккаунтами
  • Аутентификация (email/пароль, OAuth провайдеры)
  • Двухфакторная аутентификация (2FA)
  • Управление сессиями (JWT токены)
  • Процесс верификации KYC
  • Ролевой контроль доступа (RBAC)
  • Безопасность паролей и защита аккаунтов

Доменные сущности

User

Центральная сущность идентификации, представляющая пользователя платформы.

ПолеТипОписание
idUUIDПервичный идентификатор
emailVARCHAR(255)Уникальный email адрес
phoneVARCHAR(20)Опциональный номер телефона (уникальный)
password_hashVARCHAR(255)Хэш пароля bcrypt
statusENUMСтатус аккаунта
email_verified_atTIMESTAMPВремя верификации email
phone_verified_atTIMESTAMPВремя верификации телефона
last_login_atTIMESTAMPПоследний успешный вход
created_atTIMESTAMPВремя создания аккаунта
updated_atTIMESTAMPВремя последнего изменения

UserProfile

Расширенная информация о пользователе для персонализации и соответствия требованиям.

ПолеТипОписание
idUUIDПервичный идентификатор
user_idUUIDСсылка на User
first_nameVARCHAR(100)Имя по документам
last_nameVARCHAR(100)Фамилия по документам
middle_nameVARCHAR(100)Отчество
date_of_birthDATEДата рождения для KYC
avatar_urlVARCHAR(500)URL изображения профиля
languageVARCHAR(10)Код предпочитаемого языка
timezoneVARCHAR(50)Часовой пояс пользователя

Session

Активные сессии пользователя для состояния аутентификации.

ПолеТипОписание
idUUIDИдентификатор сессии
user_idUUIDСсылка на User
refresh_token_hashVARCHAR(255)Хэш refresh токена
device_fingerprintVARCHAR(255)Идентификация устройства
ip_addressINETIP адрес клиента
user_agentTEXTИнформация о браузере/клиенте
expires_atTIMESTAMPВремя истечения сессии
revoked_atTIMESTAMPВремя ручного отзыва

KycVerification

Состояние и данные процесса верификации KYC.

ПолеТипОписание
idUUIDИдентификатор верификации
user_idUUIDСсылка на User
statusENUMСтатус верификации
levelENUMДостигнутый уровень верификации
personal_infoJSONBЗашифрованные персональные данные
submitted_atTIMESTAMPВремя подачи
reviewed_atTIMESTAMPВремя завершения проверки
reviewed_byUUIDАдминистратор, проводивший проверку
rejection_reasonTEXTПричина отклонения
expires_atTIMESTAMPСрок действия верификации

KycDocument

Документы, загруженные для верификации KYC.

ПолеТипОписание
idUUIDИдентификатор документа
verification_idUUIDСсылка на KycVerification
document_typeENUMТип документа
file_keyVARCHAR(500)Ключ S3/хранилища
file_nameVARCHAR(255)Исходное имя файла
mime_typeVARCHAR(100)MIME тип файла
statusENUMСтатус документа
ocr_dataJSONBИзвлеченные данные OCR
rejection_reasonTEXTПричина отклонения

Жизненный цикл пользователя

Пользователи проходят через определенные состояния в течение своего жизненного цикла:

Определения статусов

СтатусОписаниеРазрешенные действия
PENDING_VERIFICATIONАккаунт создан, ожидает верификации emailПовторная отправка верификации, просмотр ограниченного контента
ACTIVEПолностью верифицированный и рабочий аккаунтВсе функции платформы
SUSPENDEDВременно ограничен из-за нарушения правилТолько просмотр, подача апелляции
BANNEDПерманентно заблокирован на платформеНет доступных действий

Методы аутентификации

Аутентификация по Email/Паролю

Основной метод аутентификации с использованием email и пароля:

  1. Регистрация: Пользователь указывает email и пароль
  2. Хэширование пароля: bcrypt с фактором стоимости 12
  3. Верификация Email: Уникальный токен отправляется на email
  4. Вход: Проверка email + пароль
  5. Создание сессии: Выдаются JWT access токен + refresh токен

OAuth провайдеры

Поддерживаемые провайдеры социального входа:

ПровайдерТипИдентификатор
GoogleGOOGLEprovider_user_id от Google
FacebookFACEBOOKprovider_user_id от Facebook
AppleAPPLEprovider_user_id от Apple ID
TelegramTELEGRAMprovider_user_id от Telegram

Процесс OAuth:

  1. Пользователь инициирует OAuth с провайдером
  2. Провайдер перенаправляет с кодом авторизации
  3. Бэкенд обменивает код на токены
  4. Профиль пользователя получен от провайдера
  5. Аккаунт связан или создан
  6. Выдана сессия платформы

Двухфакторная аутентификация (2FA)

TOTP (Time-based One-Time Password)

Основной метод 2FA с использованием приложений-аутентификаторов:

Конфигурация:

  • Алгоритм: SHA-1
  • Количество цифр: 6
  • Период: 30 секунд
  • Секрет: 32 байта, кодировка base32

Резервный SMS

Резервный метод 2FA через SMS:

  1. Пользователь запрашивает SMS резервный код
  2. Система отправляет 6-значный код на верифицированный телефон
  3. Код действителен 5 минут
  4. Максимум 3 попытки на один код

Управление сессиями

Архитектура токенов

Платформа использует систему двойных токенов:

Access Token (JWT)

ClaimОписание
subID пользователя (UUID)
emailEmail пользователя
rolesМассив кодов ролей
iatВремя выдачи
expВремя истечения

Параллельные сессии

  • Пользователи могут иметь несколько активных сессий
  • Каждое устройство/браузер создает отдельную сессию
  • Сессии отслеживаются по отпечатку устройства
  • Пользователь может просматривать и отзывать отдельные сессии
  • Безопасность: Подозрительная активность запускает проверку сессий

Отзыв сессий

Сессии могут быть отозваны:

  • Вручную пользователем (выход, настройки безопасности)
  • Автоматически при смене пароля
  • Автоматически при инциденте безопасности
  • Действием администратора

Процесс KYC

Уровни верификации

УровеньТребованияРазблокированные функции
NONEБез верификацииТолько просмотр, ограниченные действия
BASICEmail + телефон верифицированыБазовые покупки, ограниченные инвестиции
STANDARDДокумент удостоверения личности верифицированПолный доступ к платформе
ENHANCEDПодтверждение адреса + селфиТранзакции высокой стоимости

Поток статусов KYC

Типы документов

ТипТребуется дляОписание
PASSPORTSTANDARDГосударственный паспорт
ID_CARDSTANDARDНациональное удостоверение личности
DRIVER_LICENSESTANDARDВодительское удостоверение с фото
UTILITY_BILLENHANCEDПодтверждение адреса (недавнее)
BANK_STATEMENTENHANCEDФинансовое подтверждение адреса
SELFIEENHANCEDЖивое селфи с документом

Функции безопасности

Безопасность паролей

  • Хэширование: bcrypt с фактором стоимости 12
  • Требования: Минимум 8 символов, разный регистр, цифры
  • История: Последние 5 паролей нельзя использовать повторно
  • Истечение: Опциональная принудительная ротация (настраивается)

Защита от перебора

Пороговые значения:

  • 5 неудачных попыток: задержка 5 минут
  • 10 неудачных попыток: блокировка 15 минут
  • 20 неудачных попыток: аккаунт заблокирован, требуется верификация email

Ограничение запросов

ЭндпоинтЛимитОкно
POST /auth/login10 запросов1 минута
POST /auth/register5 запросов1 минута
POST /auth/forgot-password3 запроса5 минут
POST /auth/verify-2fa5 запросов1 минута

Публикуемые события

Модуль Core публикует следующие доменные события для межмодульной коммуникации:

СобытиеТриггерPayload
UserRegisteredРегистрация нового пользователяuserId, email, referralCode
UserVerifiedЗавершение верификации emailuserId, email
UserStatusChangedИзменение статуса аккаунтаuserId, fromStatus, toStatus, reason
UserProfileUpdatedИзменение информации профиляuserId, changedFields
UserLoggedInУспешный входuserId, ipAddress, userAgent
UserLoggedOutВыход пользователяuserId, sessionId
SessionRevokedРучной отзыв сессииuserId, sessionId, reason
TwoFactorEnabledАктивация 2FAuserId, method
TwoFactorDisabledДеактивация 2FAuserId, method
KycStatusChangedПереход статуса KYCuserId, fromStatus, toStatus, level
KycDocumentUploadedЗагружен документ для KYCuserId, verificationId, documentType
KycApprovedВерификация KYC одобренаuserId, level, approvedBy
KycRejectedВерификация KYC отклоненаuserId, reason, rejectedBy
PasswordChangedПользователь сменил парольuserId, changedAt
PasswordResetRequestedИнициирован сброс пароляuserId, email

Бизнес-правила и инварианты

Правила пользователей

  1. Email должен быть уникальным среди всех пользователей
  2. Номер телефона, если указан, должен быть уникальным
  3. Пользователь не может быть удален, если у него есть активные заказы или инвестиции
  4. Переходы статусов должны следовать определенной машине состояний
  5. Только пользователи со статусом ACTIVE могут совершать транзакции

Правила сессий

  1. Время жизни access токена: 15 минут (не настраивается)
  2. Время жизни refresh токена: 7 дней
  3. Максимум параллельных сессий на пользователя: 10
  4. Сессия должна быть отозвана при смене пароля
  5. Неактивные сессии автоматически истекают после истечения refresh токена

Правила KYC

  1. Верификация KYC истекает через 1 год (для уровня ENHANCED)
  2. Пользователь не может подать новую KYC, пока предыдущая находится UNDER_REVIEW
  3. Отклоненная KYC позволяет повторную подачу через 24 часа
  4. Уровень ENHANCED требует сначала уровень STANDARD
  5. Данные KYC должны быть зашифрованы при хранении

Точки интеграции

Предоставляет другим модулям

ИнтерфейсПотребителиНазначение
IUserLookupServiceMLM, Commerce, InvestmentПолучение данных профиля пользователя
IKycStatusServiceInvestment, MLMПроверка статуса верификации KYC
IAuthenticationServiceВсе модулиВалидация токенов, получение текущего пользователя
IRoleServiceAdminПроверка прав пользователя

Потребляет от других модулей

Модуль Core является фундаментальным и не потребляет сервисы от других бизнес-модулей.


Связанные документы