Search by

BlockAuth Auth SDK (PHP) — blockchain-based authentication client.

v0.5.0 2026-10-06 09:10 UTC

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.phppackages/core/src/protocol/BlockAuthProvider.ts
src/Protocol/WsClient.phppackages/core/src/protocol/WsClient.ts
src/Protocol/RpcClient.phppackages/core/src/protocol/RpcClient.ts
src/Protocol/Roles.phppackages/core/src/protocol/roles.ts
  • src/Protocol/* (namespace BlockAuth\Protocol) — capa de protocolo, espejo 1:1 de packages/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 a packages/core/src/utils/apiBridge.ts. Usa src/Http/* (HttpClientInterface, StreamHttpClient, sin dependencias externas).
  • src/Crypto.php y src/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' => ...]; si success es false, message explica el error.
  • El redirect_uri tiene que ser https en el dominio (o el dominio de desarrollo) de la app; http solo en localhost.
  • Para cerrar la sesión del usuario en tu app: POST /api/auth/signout con $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/.