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

POST /api/site-admin/verify-totp — Подтвердить TOTP

Сгенерировано из матриц + кода. Правки вносить в источники (docs/matrices/, server/routes/), не здесь.

ПолеЗначение
HTTPPOST /api/site-admin/verify-totp
Auth
Scope токенаread_write
PG-функцииapi.admin_promote_session, api.get_totp_pending_session
Таблицы
SRM— (вне SRM, документировано по коду)
RP (права)
Файл роутаserver/routes/site-admin.js
Статуспо коду (вне SRM)

Аргументы запроса (best-effort из хендлера; путь-параметры опущены):

АргументГдеОбяз.Заметка
codebodyподтвердить
tempTokenbodyподтвердить

Коды ответов/ошибок (из хендлера): 400, 401 (+ 200) — уточнить причины вручную

Для человека

Как открыть: второй шаг входа администратора платформы. Сразу после ввода пароля на странице входа site-admin (см. login) появляется поле для одноразового кода из приложения-аутентификатора. Введите шестизначный код и подтвердите — откроется Admin Panel.

Завершает двухфакторный вход: проверяет одноразовый код TOTP и, если он верный, открывает полноценную защищённую сессию администратора. Это и есть второй замок: пароль вы уже прошли, теперь подтверждаете, что код сгенерирован вашим аутентификатором.

Код действует короткое время и меняется каждые полминуты; принимается также код из соседнего окна — на случай рассинхронизации часов. Неверный или просроченный код — ошибка 401 («Неверный код»), вход не происходит. Между шагами есть и временной лимит: если затянуть со вторым шагом, промежуточный токен входа истекает, и тогда нужно начинать заново с пароля.

Кто может. Только администратор платформы, у которого подключён TOTP, — как продолжение его собственного входа. Других ролей здесь нет.

Для агента

Это операция site-admin, и она недоступна API-токену ни на каком scope. Второй шаг входа в панель администратора платформы — человеческий: он открывает защищённую cookie-сессию, а не токенную. Агент сюда не ходит.

Путь /api/site-admin/* закрыт для Bearer-токенов в agent-gate (server/auth/agentGate.js) — не входит ни в read-, ни в write-allowlist (закрыто по умолчанию), поэтому вызов с Authorization: Bearer tak_... возвращает 403 (Forbidden for token). Markdown-зеркала нет.

Сам verify-totp — публичный шаг входа (mw=-). Принимает tempToken (из ответа login) и code из аутентификатора; при успехе ставит cookie admin_sid:

Окно терминала
curl -X POST https://specbuilder.vnimanie.ai/api/site-admin/verify-totp \
-b admin-cookies.txt -c admin-cookies.txt \
-H "Content-Type: application/json" \
-d '{"tempToken":"0e1f2a3b-...","code":"123456"}'

Тело запроса (JSON):

ПолеТипОбяз.Назначение
tempTokenuuidдаПромежуточный токен из ответа login (step: totp)
codestringдаТекущий одноразовый код из аутентификатора

Ответ 200 — сессия открыта:

{ "step": "done", "admin": { "id": "9c8b7a6d-...", "email": "admin@example.com" } }

Неверный/просроченный код или истёкший tempToken401.

Связанные