Перейти к содержимому
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-php

zorin-authority-sdk-php

PHP SDK Authority проверяет подписанное подтверждение действия или входа, созданное с участием телефона. В пакете один публичный класс — Zorin\Authority\Verifier. Он проверяет данные локально через OpenSSL, не отправляет запросы broker и не показывает запрос подтверждения на устройстве.

Есть два контура: ZAUTH/1 для разрешения конкретной операции через broker и ZWEB/1 для подтверждения web-аутентификации. Оба требуют заранее доверенного публичного ключа телефона.

Нужны PHP 8.1+ и OpenSSL:

Окно терминала
composer config repositories.zorin-authority vcs https://github.com/localzet/zorin-authority-sdk-php
composer require zorin/authority:dev-main

Пакет называется zorin/authority, а namespace — Zorin\Authority.

Сервер приложения создаёт challenge для конкретного пользователя, origin и операции и сохраняет его до проверки. Ключ broker берётся из доверенной конфигурации, ключ телефона — из заранее выполненной регистрации устройства.

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

После успешной проверки сервер должен атомарно пометить challenge/request как использованный. SDK не имеет базы использованных challenge и сам повторное предъявление ещё действующего подтверждения не запрещает.

use Zorin\Authority\Verifier;
$payload = Verifier::verify($assertion, $trustedBrokerPublicKeyPem, [
'aud' => 'control-panel',
'origin' => 'https://control.example.test',
'challenge' => $storedChallenge,
'action' => 'server.restart',
'resource' => 'vps:42',
'phone_public_key_der_hex' => $enrolledPhonePublicKeyHex,
]);

Переменные в примере принадлежат серверному контексту приложения: $assertion получен от клиента, остальные ожидаемые значения — из доверенной конфигурации и сохранённой транзакции.

verify() требует три сегмента с префиксом z1, payload версии ZAUTH/1 и действующий период exp/iat. Затем сверяет aud/origin/challenge/action/resource, подпись broker и подпись owner proof телефона. Phone proof должен быть связан с этой транзакцией, а его срок действия — покрывать срок assertion.

Результат — массив payload. Получение массива не перезапускает VPS и не заменяет обычную проверку права пользователя на vps:42: разрешение устройства и полномочия аккаунта должны проверяться вместе.

$verified = Verifier::verifyWebAuthentication($authentication, [
'project_id' => 'control-panel',
'origin' => 'https://control.example.test',
'challenge' => $storedChallenge,
'request_id' => $storedRequestId,
'phone_public_key_der_hex' => $enrolledPhonePublicKeyHex,
'require_biometric' => true,
]);

$authentication — декодированный JSON-массив результата browser/USB SDK. Здесь нет broker assertion: проверяется ZWEB object и его phone owner proof.

При require_biometric = true допускается только связанный с подписанным действием профиль web.authenticate.biometric. Одного неподписанного текста assurance недостаточно: действие proof также должно совпасть с требуемым.

Если приложение не требует биометрию, оно может принять соответствующий базовый профиль. Этот выбор должен определяться серверной политикой операции, а не переключателем клиента.

Оба метода принимают необязательный $now в Unix seconds для воспроизводимого теста. В обычной обработке оставьте null, чтобы использовалось системное время. Будущее issued/iat допускается не более чем на 30 секунд; истёкший срок отклоняется.

Ошибка проверки приводит к исключению. Неполный expected вызывает InvalidArgumentException, часть отказов — RuntimeException, некорректный JSON/типы могут дать другие встроенные ошибки. На HTTP-границе преобразуйте их в единообразный отказ, не возвращая клиенту подробности ключей и криптографических операций.

До вызова ограничьте размер входного сообщения и проверьте его форму. SDK проверяет подписанный proof, но не выполняет enrollment, user lookup, session creation, challenge storage или атомарное предотвращение replay.

Поля expected, форматы и методы

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