BlockAuth SDK (Python)
Cliente headless del servicio de autenticación BlockAuth (Socket.IO v4).
Puerto de referencia de la capa de protocolo de @block-auth.io/core
(monorepo blockauth-sdk, patrón headless core + thin per-framework adapters).
Arquitectura
Este puerto replica la capa protocol/ del core TypeScript; la reactividad y
la UI de los bindings (React/Vue/Angular) quedan fuera de alcance.
| Este repo | Upstream (blockauth-sdk) |
|---|---|
blockauth_sdk/protocol/provider.py |
packages/core/src/protocol/BlockAuthProvider.ts |
blockauth_sdk/protocol/ws_client.py |
packages/core/src/protocol/WsClient.ts |
blockauth_sdk/protocol/rpc_client.py |
packages/core/src/protocol/RpcClient.ts |
blockauth_sdk/protocol/roles.py |
packages/core/src/protocol/roles.ts |
blockauth_sdk/protocol/transport.py |
— (abstracción propia del puerto; upstream usa socket.io directo) |
blockauth_sdk/api_bridge.py |
packages/core/src/utils/apiBridge.ts (solo la emisión del browser token) |
blockauth_sdk/crypto.py, blockauth_sdk/errors.py |
— (infra propia del puerto) |
La API pública se re-exporta desde la raíz del paquete (from blockauth_sdk import BlockAuthProvider), igual que hace el index.ts del core.
Instalación
pip install blockauth-sdk
Uso
Un backend se autentica con su apiKey y su apiSecret. El apiSecret solo
vive en el backend.
from blockauth_sdk import BlockAuthProvider
provider = BlockAuthProvider(api_key="YOUR_API_KEY", api_secret="YOUR_API_SECRET")
provider.connect()
result = provider.signin()
if result["success"]:
profile = provider.user("0xUserAddress")
print(provider.role_names)
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.
import json
import secrets
import urllib.error
import urllib.request
from blockauth_sdk.api_bridge import build_ws_server_api_url
from blockauth_sdk.crypto import sha256_hex
def post(path, body):
request = urllib.request.Request(
build_ws_server_api_url(path),
data=json.dumps(body).encode("utf-8"),
headers={"Content-Type": "application/json"},
)
try:
with urllib.request.urlopen(request) as response:
data = json.load(response)
except urllib.error.HTTPError as err: # los errores llegan como 400 con el mismo JSON
data = json.load(err)
if not data.get("success"):
raise RuntimeError(data.get("message"))
return data["message"]
credentials = {"apiKey": "YOUR_API_KEY", "apiSecret": sha256_hex("YOUR_API_SECRET")}
redirect_uri = "https://tuapp.com/callback"
# 1. Pide el enlace de login y redirige al usuario a él.
state = secrets.token_hex(16) # guárdalo en la sesión
link = post("/auth/authorize", {**credentials, "redirectUri": redirect_uri, "state": state})["url"]
# 2. El usuario vuelve a redirect_uri?code=...&state=... Comprueba que el state es el de la sesión.
# 3. Canjea el código (válido 60 s, un solo uso).
user = post("/auth/token", {**credentials, "code": code, "redirectUri": redirect_uri})
address = user["address"] # también: roles, signedExpiredAt
- 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("/auth/signout", {**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 = BlockAuthProvider(api_key="YOUR_API_KEY", api_secret="YOUR_API_SECRET")
browser_token = provider.create_browser_token()
El frontend lo usa como browserToken en @block-auth.io/core.
API
BlockAuthProvider: connect, disconnect, is_connected, signin, create_browser_token, refresh,
is_address_signed, app, user, users, roles, logs, kyc_issuer,
helpers de roles (has_role, has_role_by_slug, has_any_role,
has_any_role_by_slug) y getters (current_user, role_names, ui_config, …).
Tests
pip install -e ".[dev]"
pytest
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/.
Metadata
Release files for blockauth-sdk 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| blockauth_sdk-0.5.0.tar.gz | 16.5 kB | Without provenance | Details for blockauth_sdk-0.5.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| blockauth_sdk-0.5.0-py3-none-any.whl | Python 3 | none | any | Details for blockauth_sdk-0.5.0-py3-none-any.whl |
Total release size: 29.0 kB
Release files / blockauth_sdk-0.5.0.tar.gz
| Download URL | blockauth_sdk-0.5.0.tar.gz |
|---|---|
| Size | 16.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e5cc0d94cce4d7bc7988ba584ee9913e6b8ba4b20538964a6f60d8f377fb081b
|
|
BLAKE2b-256 checksum How to use checksums |
1c26e94718fda5372c0dbdd1ab63f0d1f858500f7e0d742c5e280bbfd79ee2e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / blockauth_sdk-0.5.0-py3-none-any.whl
| Download URL | blockauth_sdk-0.5.0-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e112a6a801a0eb9d8c5834e11c705822d6c172f06e56d3e51aedd97f00cd12a
|
|
BLAKE2b-256 checksum How to use checksums |
6041a1e941a90af16da87153ca28e381323a6692961340b0cde7a4597e4477ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for blockauth-sdk 0.5.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.