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

UnivexID Service

Назначение

UnivexID — центральный Identity-сервис платформы Univex: аутентификация, авторизация, управление сессиями, двухфакторная аутентификация, KYC, API-ключи, роли администраторов. Делегирует операции смежным сервисам (Ledger, P2P, Exchange Integration).

Транспорт: gRPC. Количество RPC: 95+, организованных по 17 доменам.
База данных: PostgreSQL (48 миграций). Дополнительно: Redis (кэш сессий/кодов), Temporal (асинхронные рабочие процессы).


Потоки аутентификации

Регистрация

Клиент → SignUp(email/phone, password)
       → SendEmailCode / SendPhoneCode (код подтверждения)
       → CompleteSignUp(code)
       → Создание аккаунта + сессии
       → Возврат токена

Вход

Клиент → SignIn(email/phone, password)
       → [Если включена 2FA: SendEmailCode / ConfirmGoogleCode / ConfirmPhoneCode]
       → CompleteSignIn(code)
       → Возврат сессии/токена

Вход через Telegram

Клиент → RegisterByTelegram(telegram_data)
       → Создание/поиск аккаунта по Telegram ID
       → Возврат сессии/токена

Ключевые перечисления

Role — роль сотрудника

enum Role {
    ROLE_UNSPECIFIED    = 0;
    CASHIER             = 1;  // Кассир
    OPERATOR            = 2;  // Оператор
    P2P_ARBITRATOR      = 3;  // P2P арбитр
    SUPPORT_STAFF       = 4;  // Сотрудник поддержки
    ADMINISTRATOR       = 5;  // Администратор
    OWNER               = 6;  // Владелец
}

AccountStatus — статус аккаунта

enum AccountStatus {
    ACCOUNT_STATUS_UNSPECIFIED = 0;
    ACCOUNT_STATUS_ACTIVE      = 1;
    ACCOUNT_STATUS_SUSPENDED   = 2;
    ACCOUNT_STATUS_BLOCKED     = 3;
}

AccountKYCStatus — статус KYC

enum AccountKYCStatus {
    KYC_STATUS_UNSPECIFIED  = 0;
    KYC_STATUS_NOT_STARTED  = 1;
    KYC_STATUS_PENDING      = 2;
    KYC_STATUS_APPROVED     = 3;
    KYC_STATUS_REJECTED     = 4;
}

Confirmation — тип подтверждения операции

enum Confirmation {
    CONFIRMATION_UNSPECIFIED = 0;
    EMAIL                    = 1;
    PHONE                    = 2;
    GOOGLE                   = 3;
    SET_PASSWORD             = 4;
    SET_PHONE                = 5;
    SET_EMAIL                = 6;
    ADMIN                    = 7;
}

BanType — тип блокировки

enum BanType {
    BAN_TYPE_UNSPECIFIED = 0;
    BAN_TYPE_TEMPORARY   = 1;
    BAN_TYPE_PERMANENT   = 2;
}

База данных

48 миграций PostgreSQL. Покрывают все домены сервиса:

Диапазон миграций Домены
1–10 Аккаунты, сессии, пароли, контактные данные
11–20 2FA (TOTP/Google), коды подтверждения, API-ключи
21–30 Административные аккаунты, роли, действия
31–40 Уведомления, тиры, личные коды, верификация
41–48 Telegram, username, дополнительные индексы

RPC по доменам

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

RPC Описание
SignIn Вход по email/телефону и паролю. Возвращает незавершённую сессию, требующую 2FA.
CompleteSignIn Завершение входа после подтверждения (код email/phone/Google).
SignUp Начало регистрации: создаёт незавершённый аккаунт, отправляет код.
CompleteSignUp Завершение регистрации после подтверждения кода.

2. Коды подтверждения

RPC Описание
SendEmailCode Отправляет OTP-код на email (через Email-сервис).
SendPhoneCode Отправляет OTP-код на телефон (через SMS Gate).
ConfirmEmailCode Подтверждает OTP-код, полученный на email.
ConfirmPhoneCode Подтверждает OTP-код, полученный по SMS.
ConfirmGoogleCode Подтверждает TOTP-код из Google Authenticator.

3. Сессии

RPC Описание
TerminateSession Завершает конкретную сессию пользователя.
TerminateSessions Завершает все сессии пользователя (кроме текущей, опционально).
ListSessions Возвращает список активных сессий аккаунта.
GetSession Возвращает данные конкретной сессии.
RefreshSession Обновляет access-токен по refresh-токену.

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

RPC Описание
CreateGoogleAuthMethod Инициирует привязку Google Authenticator. Возвращает QR-код/секрет.
CompleteCreateGoogleAuthMethod Завершает привязку Google Authenticator после подтверждения TOTP-кода.

5. Смена пароля

RPC Описание
ChangePassword Инициирует смену пароля (требует текущий пароль).
CompleteChangePassword Завершает смену пароля после подтверждения кодом.
ResetPassword Инициирует сброс пароля через email/телефон.
CompleteResetPassword Завершает сброс пароля: устанавливает новый после подтверждения кода.

6. Смена email

RPC Описание
ChangeEmail Инициирует смену email: отправляет код на новый адрес.
CompleteChangeEmail Завершает смену email после подтверждения кода.

7. Смена телефона

RPC Описание
ChangePhone Инициирует смену номера телефона.
CompleteChangePhone Завершает смену телефона после подтверждения SMS-кода.

8. Username

RPC Описание
ChangeUsername Изменяет имя пользователя (никнейм).

9. Управление аккаунтами

RPC Описание
GetAccount Возвращает данные текущего аккаунта.
GetAccountByCredentials Возвращает аккаунт по email/телефону (для внутреннего использования).
FindAccounts Поиск аккаунтов по частичному совпадению (для сотрудников).
ListAccounts Постраничный список аккаунтов с фильтрацией (для сотрудников).
BanAccount Блокирует аккаунт (временно или постоянно).
UnbanAccount Снимает блокировку с аккаунта.
ListAccountBanEvents Возвращает историю блокировок/разблокировок аккаунта.
GenerateNewPersonalCode Генерирует новый личный реферальный код для аккаунта.
GetMyPersonalCode Возвращает текущий личный код аккаунта.

10. Торговые уровни (Tiers)

RPC Описание
ListTiers Возвращает список доступных торговых уровней.
SetTier Устанавливает торговый уровень для аккаунта.

11. Верификация (KYC)

RPC Описание
StartVerification Запускает KYC-верификацию через Sumsub Integration. Возвращает токен для виджета.

12. API-ключи

RPC Описание
CreateApiKey Создаёт новый API-ключ для аккаунта.
ListApiKeys Возвращает список API-ключей аккаунта.
DeleteApiKey Удаляет API-ключ по идентификатору.

13. Административные аккаунты

RPC Описание
SignInAdmin Вход администратора по учётным данным.
GetAdminProfile Возвращает профиль текущего администратора.
GetAdminSession Возвращает данные активной административной сессии.
RevokeAdminSession Отзывает административную сессию.
CreateAdmin Создаёт новый административный аккаунт.
ListAdmins Возвращает список администраторов.
DeleteAdmin Удаляет административный аккаунт.
ConfirmOperationByAdmin Подтверждает чувствительную операцию администратором.
ListAdminNotifications Возвращает список уведомлений администратора.
ReadAdminNotification Отмечает уведомление как прочитанное.
CreateAction Создаёт запись об административном действии (audit log).
ListActions Возвращает лог административных действий.

14. Роли

RPC Описание
CreateRole Создаёт новую роль в системе RBAC.

15. Telegram

RPC Описание
RegisterByTelegram Регистрирует/аутентифицирует пользователя через Telegram (Telegram Login Widget).

Делегированные операции

UnivexID выступает агрегатором и делегирует операции смежным сервисам. Клиент обращается к UnivexID, который самостоятельно вызывает нужный downstream-сервис:

Домен Downstream-сервис Примеры операций
Балансы Exchange Integration GetBalances, GetAccountDetails
Фиатные операции Ledger CreateFiatOperation, ListFiatOperations, ProcessFiatBid
Блокчейн Exchange Integration GetDepositAddress, WithdrawToBlockchain, ListTopUps
Торговля / ордера Exchange Integration ListOrders, ListTickers
Переводы Ledger StartTransfer, GetTransferStatus, ListTransfers
Замороженные активы Ledger FreezeMoney, UnfreezeMoney, ListFrozenAssets
Горячие кошельки Exchange Integration ListHotWallets, TransferAssets
Адресная книга Ledger / внутренний ListAddressBook, AddAddress, DeleteAddress
Фиатные кассы Ledger ListFiatPlaces
Funded Codes Ledger CreateFundedCode, RedeemFundedCode, ListFundedCodes
Уведомления внутренний ListNotifications, ReadNotification

Модель авторизации

Доступ к RPC определяется ролью аккаунта:

Роль Уровень доступа
Обычный пользователь Свои данные, торговля, переводы, блокчейн-операции, P2P
CASHIER Фиатные операции (приём/выдача наличных)
OPERATOR Ручные балансовые операции
P2P_ARBITRATOR Разрешение P2P-споров
SUPPORT_STAFF Просмотр данных аккаунтов, помощь пользователям
ADMINISTRATOR Управление аккаунтами, KYC, блокировки, тиры
OWNER Полный доступ, управление администраторами и ролями

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

Параметр Описание
DATABASE_URL DSN для подключения к PostgreSQL
REDIS_URL Адрес Redis
GRPC_PORT Порт gRPC-сервера
TEMPORAL_HOST Адрес Temporal-сервера
TEMPORAL_NAMESPACE Namespace в Temporal
EXCHANGE_INTEGRATION_GRPC_ADDR Адрес Exchange Integration gRPC
LEDGER_GRPC_ADDR Адрес Ledger gRPC
P2P_GRPC_ADDR Адрес P2P gRPC
EMAIL_GRPC_ADDR Адрес Email gRPC
SMS_GRPC_ADDR Адрес SMS Gate gRPC
SUMSUB_GRPC_ADDR Адрес Sumsub Integration gRPC
JWT_SECRET Секрет для подписи JWT-токенов
ACCESS_TOKEN_TTL Время жизни access-токена
REFRESH_TOKEN_TTL Время жизни refresh-токена