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

Регистрация и аутентификация

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

Регистрация

Шаги процесса

  1. Пользователь отправляет POST /auth/sign-up на Gateway.
  2. Gateway проксирует запрос в UnivexID.SignUp (email, пароль, номер телефона).
  3. UnivexID отправляет код подтверждения через EmailService (email-код) и SMSGate (SMS-код).
  4. Пользователь отправляет POST /auth/sign-up/complete на Gateway.
  5. Gateway проксирует запрос в UnivexID.CompleteSignUp, передавая оба кода верификации.
  6. UnivexID вызывает ExchangeIntegration.Register — создаёт биржевой аккаунт с хэшем пароля.
  7. ExchangeIntegration проксирует запрос в Exchange Admin API:
    • Создаётся аккаунт с балансовыми счетами (FUNDING и TRADING).
    • Назначается тарифный уровень (tier) по умолчанию.
  8. Аккаунт получает статус 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: Аккаунт создан

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

Шаги процесса

  1. Пользователь отправляет POST /auth/sign-in на Gateway.
  2. Gateway проксирует запрос в UnivexID.SignIn (email, пароль).
  3. UnivexID проверяет учётные данные (хэш пароля, статус аккаунта).
  4. Если включена 2FA: UnivexID отправляет одноразовый код; пользователь вызывает POST /auth/sign-in/complete через Gateway → UnivexID.CompleteSignIn с этим кодом.
  5. Создаётся сессия, Gateway получает JWT-токен и устанавливает его в cookie/заголовке ответа.

Шаги для API-торговли

Для торговли через REST API пользователь создаёт API-ключ в личном кабинете:

  • Gateway → UnivexID (создание/управление ключами) → ExchangeIntegrationExchange 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 / заголовке

Вход для администратора

Шаги процесса

  1. Администратор отправляет POST /auth/sign-in на AdminGateway.
  2. AdminGateway проксирует запрос в UnivexID.SignInAdmin (email, пароль).
  3. UnivexID проверяет учётные данные и возвращает JWT с ролью администратора.
  4. Все последующие запросы администратора проходят через 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 проверяет:

  1. Наличие и корректность API-ключа.
  2. Временной штамп в пределах RecvWindow.
  3. Корректность HMAC-подписи.
  4. Статус аккаунта и лимиты запросов (rate limit).

Статусы аккаунта

Статус Описание
ACTIVE Аккаунт активен, все операции доступны
SUSPENDED Аккаунт приостановлен администратором
PENDING_VERIFICATION Ожидание верификации email/телефона

Связанные разделы