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

Документации проектов

Открыть каталог проектов
Localzet ServerАсинхронный PHP-серверTriangleФреймворк и компонентыMIX IDИдентификация и интеграцииHack APIПубличные API хакатонаACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / ClustercmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный языкinvariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet ServerPSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проекта✓zorin-client-intelДокументация проектаzorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Каталог
Документация/zorin-authority-sdk-ts

zorin-authority-sdk-ts

TypeScript SDK связывает веб-приложение с локальным Authority broker. Он создаёт запросы подтверждения операций, получает подтверждения операций и проверяет подписи ZAUTH/1. Получение ответа от устройства и проверка этого ответа — отдельные операции.

Пакет @zorin/authority экспортирует ESM-модуль и TypeScript-типы. Браузерные операции используют Fetch и Web Crypto. Подключение телефона обслуживает локальный broker.

Окно терминала
git clone https://github.com/localzet/zorin-authority-sdk-ts.git
cd zorin-authority-sdk-ts
npm install
npm run build
npm pack

Для сборки исходников версии 0.1.0 подходит TypeScript 5.8.3. При использовании 5.9.3 возникают ошибки совместимости BufferSource и ArrayBufferLike в криптографических вызовах.

Полученный tarball устанавливается в приложение через npm install /path/to/package.tgz. Имя импорта — @zorin/authority.

import { authorize } from '@zorin/authority';
const request = await authorize({
projectId: 'control-panel',
origin: window.location.origin,
challenge: challengeFromServer,
action: 'server.restart',
resource: 'vps:42',
message: 'Перезапустить сервер?',
});
if (request.status === 'approved' && request.assertion) {
await submitAssertionToServer(request.assertion);
}

challengeFromServer выдаёт сервер приложения для конкретной операции. submitAssertionToServer — обработчик приложения: он отправляет assertion серверу, который сверяет ожидаемые параметры и зарегистрированные ключи, проверяет полномочия пользователя и атомарно погашает challenge.

По умолчанию broker доступен по http://127.0.0.1:47475. authorize() создаёт запрос через POST /v1/authorize, затем опрашивает GET /v1/requests/{id} каждые 700 мс с секретом запроса в заголовке Authorization. Возвращается первый результат со статусом, отличным от pending. Denied, expired и error — тоже результаты, поэтому проверка status обязательна.

Срок запроса по умолчанию — 90 секунд, срок ожидания SDK — 70 секунд. timeoutMs ограничивает цикл ожидания, но не отменяет отдельный зависший Fetch.

verifyAssertion(assertion, brokerPublicKeyPem, expected) проверяет обе подписи и привязку к операции. Expected содержит aud, origin, challenge, action, resource и phonePublicKeyDERHex. Ключ broker — PEM, ключ телефона — SPKI DER в hex из доверенной регистрации.

import { verifyAssertion } from '@zorin/authority';
const payload = await verifyAssertion(assertion, trustedBrokerPublicKeyPem, {
aud: 'control-panel',
origin: 'https://control.example.test',
challenge: storedChallenge,
action: 'server.restart',
resource: 'vps:42',
phonePublicKeyDERHex: enrolledPhonePublicKeyHex,
});

Значения expected задаёт приложение из сохранённой транзакции. Нельзя брать ожидаемый ключ телефона из входящего owner proof: это докажет владение произвольным ключом вместо зарегистрированного устройства.

Подпись broker покрывает исходный сегмент payload. Вложенная подпись телефона покрывает owner proof с transaction scope. Проверяются срок assertion, срок owner proof, идентификаторы host/phone и точное совпадение ожидаемых параметров. Результат — проверенный payload.

Браузерная проверка помогает интерфейсу, но сервер обязан самостоятельно проверить доказательство перед выдачей сессии или изменением данных. Приложение проверяет права аккаунта и атомарно потребляет challenge: SDK не имеет replay cache и не предотвращает повтор действующего assertion.

parseAssertion() декодирует JSON без проверки подписи и времени. Его результат остаётся недоверенным. Не используйте его для допуска операции или выбора произвольного удалённого источника ключей.

Ошибка HTTP, отказ криптографической проверки и превышение времени ожидания отклоняют Promise. Denied/expired/error от broker возвращаются как AuthorityRequest, поэтому обрабатываются через status.

В опубликованной версии 0.1.0 USB-доступ не экспортируется браузерным SDK: подтверждение выполняет локальный broker. Браузер должен иметь доступ к его loopback-адресу с учётом ограничений Fetch и локальной сети.

Исходный код · MIT