Регистрация и аутентификация¶
В данном разделе описан полный жизненный цикл пользовательского аккаунта: создание, верификация, вход в систему, работа с двухфакторной аутентификацией и API-ключами.
Регистрация¶
Шаги процесса¶
- Пользователь отправляет
POST /auth/sign-upна Gateway. - Gateway проксирует запрос в UnivexID.SignUp (email, пароль, номер телефона).
- UnivexID отправляет код подтверждения через EmailService (email-код) и SMSGate (SMS-код).
- Пользователь отправляет
POST /auth/sign-up/completeна Gateway. - Gateway проксирует запрос в UnivexID.CompleteSignUp, передавая оба кода верификации.
- UnivexID вызывает ExchangeIntegration.Register — создаёт биржевой аккаунт с хэшем пароля.
- ExchangeIntegration проксирует запрос в Exchange Admin API:
- Создаётся аккаунт с балансовыми счетами (FUNDING и TRADING).
- Назначается тарифный уровень (tier) по умолчанию.
- Аккаунт получает статус ACTIVE.
Диаграмма: Регистрация¶
sequenceDiagram
actor U as Пользователь
participant GW as Gateway
participant UID as UnivexID
participant ES as EmailService
participant SMS as SMSGate
participant EI as ExchangeIntegration
participant EA as Exchange Admin
U->>GW: POST /auth/sign-up\n(email, password, phone)
GW->>UID: SignUp(email, password, phone)
UID->>ES: Отправить код подтверждения на email
UID->>SMS: Отправить SMS-код
ES-->>U: Email с кодом
SMS-->>U: SMS с кодом
U->>GW: POST /auth/sign-up/complete\n(email_code, sms_code)
GW->>UID: CompleteSignUp(email_code, sms_code)
UID->>UID: Верификация кодов
UID->>EI: Register(user_id, password_hash)
EI->>EA: CreateAccount(user_id, password_hash)
EA->>EA: Создать BalanceAccounts (FUNDING, TRADING)
EA->>EA: Назначить Default Tier
EA-->>EI: account_id
EI-->>UID: OK
UID-->>GW: Аккаунт создан (ACTIVE)
GW-->>U: Аккаунт создан
Вход в систему¶
Шаги процесса¶
- Пользователь отправляет
POST /auth/sign-inна Gateway. - Gateway проксирует запрос в UnivexID.SignIn (email, пароль).
- UnivexID проверяет учётные данные (хэш пароля, статус аккаунта).
- Если включена 2FA: UnivexID отправляет одноразовый код; пользователь вызывает
POST /auth/sign-in/completeчерез Gateway → UnivexID.CompleteSignIn с этим кодом. - Создаётся сессия, Gateway получает JWT-токен и устанавливает его в cookie/заголовке ответа.
Шаги для API-торговли¶
Для торговли через REST API пользователь создаёт API-ключ в личном кабинете:
- Gateway → UnivexID (создание/управление ключами) → ExchangeIntegration → Exchange Admin (регистрация ключа на уровне биржи).
- Каждый запрос к Exchange API подписывается с помощью HMAC-SHA256:
- Подпись включает timestamp (
timestamp) и параметры запроса. - Exchange API проверяет подпись и контрольное окно времени (
RecvWindow).
Диаграмма: Вход в систему¶
sequenceDiagram
actor U as Пользователь
participant GW as Gateway
participant UID as UnivexID
participant SMS as SMSGate / EmailService
U->>GW: POST /auth/sign-in\n(email, password)
GW->>UID: SignIn(email, password)
UID->>UID: Проверка пароля и статуса аккаунта
alt 2FA включена
UID->>SMS: Отправить 2FA-код
SMS-->>U: Код подтверждения
U->>GW: POST /auth/sign-in/complete\n(2fa_code)
GW->>UID: CompleteSignIn(2fa_code)
UID->>UID: Проверка 2FA-кода
end
UID->>UID: Создать сессию
UID-->>GW: JWT-токен
GW-->>U: JWT в cookie / заголовке
Вход для администратора¶
Шаги процесса¶
- Администратор отправляет
POST /auth/sign-inна AdminGateway. - AdminGateway проксирует запрос в UnivexID.SignInAdmin (email, пароль).
- UnivexID проверяет учётные данные и возвращает JWT с ролью администратора.
- Все последующие запросы администратора проходят через Casbin RBAC в AdminGateway: роль проверяется перед каждым проксированием.
Диаграмма: Вход администратора¶
sequenceDiagram
actor A as Администратор
participant AGW as AdminGateway
participant CB as Casbin RBAC
participant UID as UnivexID
A->>AGW: POST /auth/sign-in\n(email, password)
AGW->>UID: SignInAdmin(email, password)
UID->>UID: Проверка учётных данных + роли
UID-->>AGW: JWT (с ролью admin)
AGW-->>A: JWT в cookie / заголовке
Note over A,CB: Последующие запросы
A->>AGW: Любой запрос с JWT
AGW->>CB: Проверка роли и прав доступа
CB-->>AGW: Разрешено / Запрещено
AGW-->>A: Ответ или 403 Forbidden
Аутентификация API-запросов¶
Запросы к торговому API (/api/v1/) аутентифицируются по API-ключу:
POST /api/v1/orders/place/
Headers:
X-API-Key: <api_key>
X-Signature: HMAC-SHA256(secret_key, timestamp + method + path + body)
X-Timestamp: <unix_ms>
| Параметр | Описание |
|---|---|
X-API-Key |
Публичная часть API-ключа |
X-Signature |
HMAC-SHA256 подпись запроса |
X-Timestamp |
Время запроса в миллисекундах (Unix) |
RecvWindow |
Допустимое окно расхождения времени (мс) |
Exchange API проверяет:
- Наличие и корректность API-ключа.
- Временной штамп в пределах
RecvWindow. - Корректность HMAC-подписи.
- Статус аккаунта и лимиты запросов (rate limit).
Статусы аккаунта¶
| Статус | Описание |
|---|---|
ACTIVE |
Аккаунт активен, все операции доступны |
SUSPENDED |
Аккаунт приостановлен администратором |
PENDING_VERIFICATION |
Ожидание верификации email/телефона |
Связанные разделы¶
- Управление балансами — структура счетов, создаваемых при регистрации.
- Торговля — использование API-ключей для торговых запросов.