Skip to content
страница целиком, в Markdown — вставьте в чат с моделью

Справочник ​

Сводка по единой авторизации и MCP-федерации: переменные, TTL, схема данных, поведение при отзыве доступа и карта кода в api-new.

Переменные окружения платформы ​

SSO ​

ПеременнаяПо умолчаниюСмысл
SSO_CODE_TTL_SEC60Время жизни одноразового sso_code
SSO_REFRESH_EXPIRE30dСрок SERVICE_REFRESH-токена сервиса

Token introspection ​

ПеременнаяПо умолчаниюСмысл
AUTH_VALIDATE_VERIFY_SIGNATUREtrueПроверять подпись JWT в /auth/validate. Выключать без причины не нужно: стоит ~5 мкс и страхует от компрометации Redis
AUTH_VALIDATE_VERDICT_TTL_MS5000TTL внутреннего LRU позитивных вердиктов
AUTH_VALIDATE_VERDICT_MAX_ENTRIES10000Размер этого LRU

MCP-федерация ​

ПеременнаяПо умолчаниюСмысл
MCP_CANONICAL_URLhttp://localhost:3636Канонический адрес MCP платформы
MCP_FEDERATION_REFRESH_SEC300Период пересборки федеративного снапшота. 0 выключает федерацию целиком
MCP_FEDERATION_CALL_TIMEOUT_MS30000Жёсткий потолок таймаута федеративного вызова
MCP_FEDERATION_MAX_REQUEST_BYTES262144Максимум тела исходящего вызова (256 КБ)
MCP_FEDERATION_MAX_RESPONSE_BYTES5000000Максимум ответа сервиса (5 МБ)
MCP_FEDERATION_MAX_CONCURRENT16Одновременных федеративных вызовов
MCP_FEDERATION_MAX_QUEUE200Длина очереди ожидания слота

Сборка списка тулов живёт по собственным, более жёстким лимитам: таймаут 10 с, запрос ≤ 16 КБ, ответ ≤ 2 МБ.

Сроки жизни ​

ЧтоСколько
sso_code60 с, одноразовый (атомарный GETDEL в Redis)
ACCESS-токен из /sso/token60 с (плюс эфемерная сессия на тот же срок)
Синтетический ACCESS для федеративного вызова60 с, сессия гасится сразу после ответа
SERVICE_REFRESH30 дней, с ротацией на каждом обмене
Кэш реестра сервисных кредов на платформе60 с, сбрасывается при правке строки через админ-ручки
Федеративный снапшот туловПересобирается раз в 300 с
Рекомендуемый кэш /auth/validate на стороне сервиса30 с позитив, 5 с негатив

Лимиты запросов ​

РучкаЛимит
POST /sso/grant30 запросов в минуту
POST /sso/token60 запросов в минуту на сервис (ключ — X-Service-Client, при его отсутствии IP)

Схема данных ​

external_tools — реестр сервисов ​

Поля единой авторизации, добавленные миграцией 20260913100000-unified-auth-registry:

КолонкаТипНазначение
sso_enabledboolean, not null, default falseРазрешён ли браузерный SSO
sso_redirect_uristext[] (varchar 2048)Allowlist префиксов возврата
service_secret_hashvarchar(64)sha256 сервисного секрета
mcp_urlvarchar(2048)Endpoint MCP-канала
mcp_timeout_msinteger, not null, default 30000Таймаут федеративного вызова

Рядом живут более ранние code, is_active, mcp_enabled, permission_key и MF-поля.

service_refresh_tokens — refresh-токены сервисов ​

КолонкаТипНазначение
_iduuid PK
user_iduuid → users._id, on delete cascadeВладелец
service_codevarchar(64)Код сервиса из реестра
token_sha256varchar(64), uniqueХеш токена — сам токен не хранится
jtiuuidИдентификатор выпуска
rotated_from_jtiuuid, nullПредыдущее звено цепочки ротации
expires_attimestamptzСрок
revoked_attimestamptz, nullОтзыв: ротацией, ревокацией или обнаружением повтора
last_used_attimestamptz, nullПоследний обмен

Индексы: (user_id, service_code) и (jti).

permissions.allowed_urls — права на федеративные тулы ​

Колонка — массив текста, каждый элемент JSON-строка:

json
{"url":"ext/idea_calc/calc_unit_economics","httpMethod":"POST"}

Та же форма используется для обычных роутов платформы (без префикса /api/v1), поэтому федеративные тулы проходят существующую проверку прав без исключений.

Матрица отзыва доступа ​

СобытиеACCESS пользователяSERVICE_REFRESH сервисов
Обычный logoutГаснет (session_revoked)Живёт
«Выйти везде»Гаснут всеОтзываются
Смена пароляГаснутОтзываются
Восстановление пароля по ссылкеГаснутОтзываются
Деактивация пользователяvalid: false/sso/token → access_denied
Обнаружен повтор refresh—Отзывается вся цепочка пользователь + сервис
Удаление строки сервиса из реестра—Обмен перестаёт работать: кред больше не проходит

Изменение прав пользователя токены не отзывает — оно повышает epoch, по которому сервисы сбрасывают свои кэши.

Коды ошибок ​

POST /auth/validate ​

Всегда 200. Причина отказа — в reason: missing_authorization, unsupported_authorization_type, invalid_or_expired, wrong_token_type, user_pending_confirmation, session_revoked, validation_unavailable.

POST /sso/grant ​

200 — выдан redirect; 401 — нет валидного пользовательского токена; 404 Unknown SSO client; 403 redirect_uri is not allowed for this client.

POST /sso/token ​

200 — пара токенов; 401 invalid_client; 403 unauthorized_client; 403 access_denied; 400 invalid_request; 400 invalid_grant (истёкший или использованный код, чужой клиент, неизвестный или повторно использованный refresh).

Федеративный вызов тула ​

Возвращается пользователю как результат тула с isError: true и телом {"service":"<code>","error":{"code":…,"message":…}}: request_failed, request_too_large, response_too_large, invalid_json, http_error, overloaded, internal.

Админ-ручки реестра ​

201 / 204 / 200 при успехе; 400 — неполная строка или неизвестные тулы; 404 — строки нет; 409 — дубль code/permissionKey либо вызов не от админа; 502 — MCP-канал сервиса недоступен.

Карта кода в api-new ​

ФайлЧто внутри
core/services/v1/auth/auth.service.jsPOST /auth/validate, сборка вердикта, include-гейт
core/services/v1/auth/lib/validateFastPath.jsРазбор include, дешёвые отказы, LRU вердиктов
core/services/v1/auth/lib/serviceClients.jsПроверка сервисного креда, кэш реестра на 60 с
core/services/v1/sso/sso.service.jsPOST /sso/grant, POST /sso/token, ротация и обнаружение повтора
core/services/v1/sso/lib/ssoHelpers.jsСверка redirect_uri, сборка redirect, вердикт по refresh
core/services/v1/sso/lib/ssoCodeStore.jsОдноразовые коды в Redis
core/services/v1/mcp/lib/federatedAggregator.jsОпрос каналов, префиксы имён, сборка снапшота
core/services/v1/mcp/lib/federatedPermissions.jsКаталог тулов и отбор url для пермишена
core/services/v1/mcp/lib/toolsCaller.jscallFederatedTool, синтетический ACCESS
core/services/v1/mcp/lib/mcpHttp.jsHTTP JSON-RPC с потолками запроса и ответа
core/services/v1/mcp/lib/concurrencyGate.jsСемафор исходящих вызовов
core/services/v1/admins/admin.service.jsАдмин-ручки реестра, каталога тулов и сборки пермишена
core/common/logic/revokeServiceRefreshTokens.jsОтзыв сервисных refresh при смене пароля
migrations/20260913100000-unified-auth-registry.jsПоля реестра и таблица service_refresh_tokens

Юнит-тесты лежат рядом: core/tests/unit/logic/{validateFastPath,ssoHelpers,federatedAggregator,federatedPermissions,mcpHttp,concurrencyGate}.unit.test.js.

Документация по инфраструктуре