Autoalojamiento
Conecta tu producto a tu instancia
Haz real el autoalojamiento: apunta las aplicaciones de tus clientes a tu propia instancia de Keyright. Crea un producto, genera su clave de firma, integra la clave pública y tu URL base en el SDK, emite una licencia y activa — los mismos SDK que en Keyright gestionado, solo que con tu clave de producto y tu URL.
Este es el paso que hace real el autoalojamiento: las aplicaciones de tus clientes deben licenciarse contra tu instancia de Keyright, no la nuestra. Los SDK (NuGet, npm, PyPI, Maven) son los mismos que describen las guías de integración para el Keyright gestionado — nada está codificado a un endpoint de Delta1. Todo el recorrido se ejecuta contra tu instancia; abajo, $BASE es tu URL base (de Despliegue → Verifica) y $TOKEN es tu KEYRIGHT_ADMIN_TOKEN.
Paso 1 — Crea el producto
Los productos no existen hasta que los creas (la llamada de clave de firma del paso 2 devolverá 404 de lo contrario). En el panel (Products → Add product) o vía la API:
curl -X POST -H "X-Admin-Token: $TOKEN" -H "content-type: application/json" \
$BASE/admin/products -d '{"name":"Acme App","slug":"acme-app"}'
Paso 2 — Genera la clave de firma del producto
Esta es la clave que firma las licencias de acme-app; integra su mitad pública en tu aplicación.
curl -X POST -H "X-Admin-Token: $TOKEN" $BASE/admin/products/acme-app/signing-key
# -> { "signingPublicKey": "MIIBIjANBgkq...", "rotated": false, ... }
La clave privada se genera y se almacena en tu base de datos, cifrada con KEK — nunca sale de tu instancia. Copia la clave pública devuelta. (Como alternativa, usa una clave a nivel de inquilino vía KEYRIGHT_SIGNING_KEY e integra GET $BASE/admin/public-key — pero una clave por producto es la opción más simple e inequívoca.)
Paso 3 — Integra esa clave pública en tu aplicación
Vía el SDK — esto verifica licencias offline, sin ninguna llamada a tu servidor:
| Runtime | Opción | Valor |
|---|---|---|
.NET (Keyright.NET) | PublicKeyBase64 | la clave pública de tu producto (paso 2) |
Node (keyright) | publicKeyBase64 | la clave pública de tu producto |
Python (keyright) | public_key_base64 | la clave pública de tu producto |
Java (com.delta1labs:keyright) | publicKeyBase64 | la clave pública de tu producto |
Paso 4 — Apunta el SDK a tu instancia
Para activación/validación/medición en línea — establece la URL del servicio a la URL base de tu instancia ($BASE):
| Runtime | Opción | Valor |
|---|---|---|
| .NET | ServiceUrl | https://licensing.acme.example |
| Node | serviceUrl | https://licensing.acme.example |
| Python | service_url | https://licensing.acme.example |
| Java | serviceUrl | https://licensing.acme.example |
Ejemplo en .NET (Node, Python y Java son idénticos salvo por el nombrado — consulta sus guías de integración; para una clave de prueba de autoservicio tu aplicación invoca POST <base>/v1/trial directamente, que envía la clave por correo al cliente — quien luego la introduce y tu aplicación la activa como cualquier clave de pago):
using Keyright.Client;
static readonly KeyrightClient License = KeyrightClient.Initialize(new KeyrightOptions
{
Product = "acme-app", // your product slug on your instance
PublicKeyBase64 = "MIIBIjANBgkq...", // your product's public key (step 2)
ServiceUrl = "https://licensing.acme.example", // your instance base URL (step 4); omit if offline-only
});
Paso 5 — Emite una licencia a un cliente
Opcionalmente, define un nivel (un número de puestos + plantilla de derechos) y luego emite una clave:
# optional: a reusable tier
curl -X POST -H "X-Admin-Token: $TOKEN" -H "content-type: application/json" \
$BASE/admin/products/acme-app/tiers -d '{"name":"pro","seats":3,"entitlements":{"export":"true"}}'
# issue a license (omit "id" to auto-generate the key)
curl -X POST -H "X-Admin-Token: $TOKEN" -H "content-type: application/json" \
$BASE/admin/licenses -d '{"licensee":"Acme Inc.","product":"acme-app","tier":"pro","seats":3,"email":"owner@acme.com"}'
# -> HTTP 201 { "id":"LIC-XXXX...", "product":"acme-app", "tier":"pro", "seats":3, "used":0, ... }
El id (LIC-…) es la clave que entregas al cliente. seats en la licencia anula el valor por defecto del nivel.
Paso 6 — La aplicación del cliente activa
La llamada de activación del SDK (o un POST $BASE/v1/activate en crudo con el cuerpo { "key", "machineId", "product" }, sin autenticación) vincula el equipo, consume un puesto y devuelve un lease firmado que tu aplicación guarda en caché y vuelve a comprobar offline:
LicenseInfo info = await License.ActivateAsync(customerKey); // online: binds this machine
if (info.IsPaid && License.IsEnabled("export")) { /* unlock */ }
Esa es toda la diferencia con el Keyright gestionado: tu clave de producto y tu URL. Los endpoints /v1/*, los formatos de licencia/lease y cada llamada del SDK son idénticos. Recorridos completos por lenguaje: .NET, Node.js, Python, Java, o la API HTTP en crudo (que documenta los cuerpos exactos de las solicitudes /v1/*).