blockauth / sdk
BlockAuth Auth SDK (PHP) — blockchain-based authentication client.
Requires
- php: >=8.1
- elephantio/elephant.io: ^4.0
Requires (Dev)
- phpunit/phpunit: ^10
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-11-04 12:09:13 UTC
README
Cliente headless del servicio de autenticación BlockAuth (Socket.IO v4).
Espejo headless de la capa protocol/ del paquete @block-auth.io/core del
monorepo TypeScript blockauth-sdk, que sigue el patrón "headless core +
thin per-framework adapters" (calcado del puerto de referencia Python).
Arquitectura
El layout replica la arquitectura del core upstream:
| Este puerto (PHP) | Upstream (@block-auth.io/core) |
|---|---|
src/Protocol/BlockAuthProvider.php | packages/core/src/protocol/BlockAuthProvider.ts |
src/Protocol/WsClient.php | packages/core/src/protocol/WsClient.ts |
src/Protocol/RpcClient.php | packages/core/src/protocol/RpcClient.ts |
src/Protocol/Roles.php | packages/core/src/protocol/roles.ts |
src/Protocol/*(namespaceBlockAuth\Protocol) — capa de protocolo, espejo 1:1 depackages/core/src/protocol/*del upstream. La semántica del protocolo es idéntica.src/Transport/*— abstracción de transporte propia de este puerto (TransportInterface,ElephantIoTransport); el upstream usa socket.io directamente y no la necesita.src/ApiBridge.php— emisión del browser token, equivalente apackages/core/src/utils/apiBridge.ts. Usasrc/Http/*(HttpClientInterface,StreamHttpClient, sin dependencias externas).src/Crypto.phpysrc/Exceptions/*— infraestructura específica del puerto.
Instalación
composer require blockauth/sdk
Uso
Un backend se autentica con su apiKey y su apiSecret. El apiSecret solo
vive en el backend.
use BlockAuth\Protocol\BlockAuthProvider;
$provider = new BlockAuthProvider('YOUR_API_KEY', 'YOUR_API_SECRET');
$provider->connect();
$result = $provider->signin();
if ($result['success']) {
$profile = $provider->user('0xUserAddress');
print_r($provider->getRoleNames());
}
$provider->disconnect();
No autentiques un backend con un browser token: el ws-server lo rechaza (exige
un Origin de confianza y su scope no da acceso a user, users, roles ni
logs).
Login por redirección
Para que tus usuarios inicien sesión con BlockAuth, tu backend los manda al login alojado y recibe de vuelta un código de un solo uso, que canjea por la dirección y los roles del usuario. La dirección la da el ws-server, nunca el navegador.
use BlockAuth\ApiBridge;
use BlockAuth\Crypto;
use BlockAuth\Http\StreamHttpClient;
$http = new StreamHttpClient();
$credentials = ['apiKey' => 'YOUR_API_KEY', 'apiSecret' => Crypto::sha256Hex('YOUR_API_SECRET')];
$redirectUri = 'https://tuapp.com/callback';
// 1. Pide el enlace de login y redirige al usuario a él.
$_SESSION['state'] = bin2hex(random_bytes(16));
$res = $http->postJson(ApiBridge::buildWsServerApiUrl('/auth/authorize'),
$credentials + ['redirectUri' => $redirectUri, 'state' => $_SESSION['state']]);
header('Location: ' . $res['message']['url']);
// 2. El usuario vuelve a $redirectUri?code=...&state=... Comprueba que
// $_GET['state'] es el de la sesión.
// 3. Canjea el código (válido 60 s, un solo uso).
$res = $http->postJson(ApiBridge::buildWsServerApiUrl('/auth/token'),
$credentials + ['code' => $_GET['code'], 'redirectUri' => $redirectUri]);
$address = $res['message']['address']; // también: roles, signedExpiredAt
- Todas las respuestas son
['success' => bool, 'message' => ...]; sisuccessesfalse,messageexplica el error. - El
redirect_uritiene que serhttpsen el dominio (o el dominio de desarrollo) de la app;httpsolo enlocalhost. - Para cerrar la sesión del usuario en tu app:
POST /api/auth/signoutcon$credentials + ['address' => $address].
Browser token para tu frontend
Si tu frontend usa @block-auth.io/core, el backend le emite un browser token
para que el apiSecret no salga nunca del backend:
$provider = new BlockAuthProvider('YOUR_API_KEY', 'YOUR_API_SECRET');
$browserToken = $provider->createBrowserToken();
El frontend lo usa como browserToken en @block-auth.io/core.
API
BlockAuthProvider: connect, disconnect, isConnected, signin, createBrowserToken, refresh,
isAddressSigned, app, user, users, roles, logs, kycIssuer, helpers de
roles (hasRole, hasRoleBySlug, hasAnyRole, hasAnyRoleBySlug) y getters
(getCurrentUser, getRoleNames, getUiConfig, …).
Tests
composer install
vendor/bin/phpunit
Smoke test contra un servidor real
Los tests usan un transporte simulado. Para probar el SDK contra el ws-server
de PRE (transporte real, login por redirección y canje del código), usa la app
de prueba de examples/test-app/.