Documentación v2.0

KeyNexus Documentation

Guía completa para implementar el sistema de autenticación y licencias más seguro y flexible del mercado.

Primeros Pasos

Comienza a usar KeyNexus en minutos

Introducción

KeyNexus es un sistema de autenticación y gestión de licencias diseñado para proteger tus aplicaciones de escritorio, web y móviles. Ofrece características avanzadas como:

  • Autenticación segura - Login con tokens JWT y encriptación de extremo a extremo
  • Sistema de licencias - Generación, validación y gestión de licencias con múltiples tipos
  • Bloqueo HWID - Vincula licencias a hardware específico para prevenir piratería
  • Gestión de sesiones - Control total sobre sesiones activas y dispositivos
  • API RESTful - Integración sencilla con cualquier lenguaje de programación
  • Dashboard completo - Panel de administración intuitivo y potente

Inicio Rápido

Este tutorial asume que ya tienes una cuenta en KeyNexus y has creado tu primera aplicación en el dashboard.

Paso 1: Obtener credenciales

Ve a tu dashboard, selecciona la aplicación y copia las credenciales de API:

Credenciales de la aplicaciónjson
{
  "appId": "app_xxxxxxxxxxxx",
  "secretKey": "sk_xxxxxxxxxxxxxxxxxxxx"
}

Paso 2: Realizar tu primera petición

Usa la API para inicializar la aplicación:

Inicializar aplicaciónbash
curl -X POST https://keynexus.es/api/client \
  -H "Content-Type: application/json" \
  -d '{
    "action": "init",
    "appId": "app_xxxxxxxxxxxx",
    "secretKey": "sk_xxxxxxxxxxxxxxxxxxxx"
  }'

Paso 3: Autenticar usuario

Valida la licencia o credenciales del usuario:

Login con licenciabash
curl -X POST https://keynexus.es/api/client \
  -H "Content-Type: application/json" \
  -d '{
    "action": "license",
    "appId": "app_xxxxxxxxxxxx",
    "secretKey": "sk_xxxxxxxxxxxxxxxxxxxx",
    "key": "XXXXX-XXXXX-XXXXX-XXXXX",
    "hwid": "machine_hardware_id"
  }'

Instalación

KeyNexus ofrece SDKs oficiales para los lenguajes más populares. Selecciona tu lenguaje preferido:

JS
JavaScript / TypeScript
📖 Docs
npm install keynexus

✅ TypeScript • Browser & Node.js • React • Next.js

C#
.NET / C#
📖 Docs
dotnet add package KeyNexus.SDK

✅ Auto HWID • Async/await • .NET Standard 2.0+

Py
Python
📖 Docs
pip install keynexus-python

✅ Type hints • Exception handling • Python 3.7+

go get github.com/keynexus/keynexus-go

✅ Context support • Thread-safe • Go 1.18+

C++
C++
📖 Docs
vcpkg install keynexus-cpp

✅ C++17 • Cross-platform • Header-only option

Instalación & Descarga

Los SDKs están disponibles públicamente en este servidor. Puedes instalarlos via npm/pip o descargar el código fuente:

JavaScript:npm install keynexus|Ver código fuente
Python:pip install keynexus-python|Ver código fuente
C#:dotnet add package KeyNexus.SDK|Ver código fuente
Nota: Los SDKs incluyen código fuente completo, ejemplos de uso y documentación. Navega a /sdks en el navegador para explorar y descargar el código directamente desde este servidor.

Configuración Inicial

Después de instalar el SDK, configura las variables de entorno o inicializa directamente:

Configuración con variables de entornoenv
# .env
KEYNEXUS_APP_ID=app_xxxxxxxxxxxx
KEYNEXUS_SECRET_KEY=sk_xxxxxxxxxxxxxxxxxxxx
KEYNEXUS_API_URL=https://keynexus.es/api
Importante: Nunca expongas tu SECRET_KEY en el código del cliente. Esta clave solo debe usarse en el servidor.
Inicialización en C#csharp
using KeyNexus;

var client = new KeyNexusClient(new KeyNexusOptions
{
    AppId = Environment.GetEnvironmentVariable("KEYNEXUS_APP_ID"),
    SecretKey = Environment.GetEnvironmentVariable("KEYNEXUS_SECRET_KEY"),
    Version = "1.0.0"
});

// Inicializar la aplicación
var initResult = await client.InitializeAsync();

if (initResult.Success)
{
    Console.WriteLine("KeyNexus inicializado correctamente");
    Console.WriteLine($"Versión de la app: {initResult.Data.Version}");
}
else
{
    Console.WriteLine($"Error: {initResult.Message}");
}

Portales de Acceso

Client Portal y Reseller Portal con branding personalizado

Client Portal

Portal web donde tus usuarios finales pueden gestionar sus licencias, ver información de su cuenta y controlar sus sesiones activas.

URL de acceso: https://keynexus.es/client/login?app=YOUR_APP_ID
También funciona sin el parámetro app: https://keynexus.es/client/login

Características del Client Portal

  • Branding personalizado: Logo "Client Portal" (client-portal.png) visible en la página de login
  • Gestión de licencias: Ver tipo, estado, fecha de expiración y usos restantes
  • Control de sesiones: Ver sesiones activas, dispositivos conectados y cerrar sesiones remotas
  • Perfil de usuario: Información de la cuenta, HWID vinculado, historial de login
  • Auto-logout en suspensión: Si el admin banea al usuario, su sesión se cierra automáticamente y la licencia se revoca
Ejemplo: Enlace directo al Client Portalhtml
<!-- Envía este link a tus usuarios -->
<a href="https://keynexus.es/client/login?app=app_xxxxxxxxxxxx">
  Acceder a tu cuenta
</a>

<!-- O sin especificar app (usuario ingresa el ID manualmente) -->
<a href="https://keynexus.es/client/login">
  Portal de Cliente
</a>

SEO y Metadata

El Client Portal incluye metadata optimizada para SEO y redes sociales:

  • Título: "Client Portal Login - KeyNexus"
  • Descripción: "Access your client portal. Sign in to manage your license, view sessions, and access your protected software."
  • Open Graph imagen: /client-portal.png (1200x630px)
  • Twitter Card: summary_large_image

Reseller Portal

Portal dedicado para revendedores autorizados que pueden gestionar licencias asignadas, usuarios y configuraciones según los permisos otorgados.

URL de acceso: https://keynexus.es/reseller/login

Características del Reseller Portal

  • Branding personalizado: Logo "Reseller Portal" (reseller.png) visible en la página de login
  • Gestión de licencias asignadas: Ver y administrar solo las licencias asignadas por el admin
  • Control de usuarios: Asignar licencias a usuarios finales (si tiene permiso)
  • Reset HWID: Desvincular dispositivos de licencias (con permiso)
  • Blacklist/Whitelist: Gestionar listas de bloqueo por IP o HWID (con permiso)
  • Logs y auditoría: Ver registros de actividad de sus licencias (con permiso)
  • Auto-logout en suspensión: Si el admin suspende al reseller, su sesión se cierra automáticamente

Sistema de Permisos

El admin puede controlar qué funcionalidades tiene cada reseller:

viewLicenses
assignUsers
resetHwid
manageBlacklist
manageWhitelist
viewLogs

SEO y Metadata

El Reseller Portal incluye metadata optimizada para SEO y redes sociales:

  • Título: "Reseller Portal Login - KeyNexus"
  • Descripción: "Access the reseller portal. Sign in to manage your assigned licenses, users, and reseller account."
  • Open Graph imagen: /reseller.png (1200x630px)
  • Twitter Card: summary_large_image
Ejemplo: Compartir enlace al Reseller Portalhtml
<!-- Link que puedes enviar a tus resellers -->
<a href="https://keynexus.es/reseller/login">
  Portal de Reseller - Iniciar Sesión
</a>

<!-- Desde el dashboard admin, puedes copiar y compartir este link -->

Personalización de Branding

Cada portal muestra su propia imagen de branding en la página de login. Las imágenes están ubicadas en /public:

Client Portal
Archivo: /public/client-portal.png
Dimensiones recomendadas: 280px ancho (altura automática)
Formato: PNG con transparencia
Uso: Se muestra en todas las URLs que incluyan /client/login
Reseller Portal
Archivo: /public/reseller.png
Dimensiones recomendadas: 280px ancho (altura automática)
Formato: PNG con transparencia
Uso: Se muestra en /reseller/login
Importante: Las imágenes se sirven desde /public y están accesibles públicamente. Asegúrate de que tengan las dimensiones correctas para una visualización óptima en diferentes dispositivos.

Autenticación

Sistema de login y gestión de sesiones

Visión General

KeyNexus soporta múltiples métodos de autenticación para adaptarse a diferentes casos de uso:

Login con Licencia

El usuario ingresa una clave de licencia válida. Ideal para software de pago único.

Login con Usuario/Contraseña

Autenticación tradicional con email/usuario y contraseña. Ideal para SaaS.

Login con HWID

Autenticación automática basada en el hardware del dispositivo. Sin contraseñas.

Login Combinado

Combina licencia + HWID para máxima seguridad y prevención de compartir cuentas.

Flujo de Login

1
2
3

Inicializar Aplicación

El cliente envía applicationId y version al servidor para validar que la app esté activa.

Verificar Blacklist/Whitelist

Se verifica que la IP y HWID del usuario no estén bloqueados.

Validar Credenciales

Se valida la licencia, usuario/contraseña y se verifica el HWID si está configurado.

Crear Sesión

Se genera un token JWT y se registra la sesión en la base de datos.

Ejemplo de login con licencia (C#)csharp
// Login con licencia
var loginResult = await KeyNexus.LoginWithLicenseAsync(new LicenseLoginRequest
{
    LicenseKey = "XXXXX-XXXXX-XXXXX-XXXXX",
    Hwid = HardwareInfo.GetHwid() // Obtener HWID del sistema
});

if (loginResult.Success)
{
    // Usuario autenticado
    Console.WriteLine($"Bienvenido, {loginResult.Data.User.Username}");
    Console.WriteLine($"Licencia expira: {loginResult.Data.User.SubscriptionExpiry}");
    
    // Guardar token para futuras peticiones
    KeyNexus.SetSessionToken(loginResult.Data.SessionToken);
}
else
{
    switch (loginResult.ErrorCode)
    {
        case "INVALID_LICENSE":
            Console.WriteLine("Licencia inválida o expirada");
            break;
        case "HWID_MISMATCH":
            Console.WriteLine("Esta licencia está vinculada a otro dispositivo");
            break;
        case "USER_BANNED":
            Console.WriteLine("Tu cuenta ha sido suspendida");
            break;
        default:
            Console.WriteLine($"Error: {loginResult.Message}");
            break;
    }
}

Tokens JWT

KeyNexus utiliza JSON Web Tokens (JWT) para mantener la sesión del usuario de forma segura. El token contiene:

Estructura del JWT payloadjson
{
  "sub": "user_xxxxxxxxxxxx",        // ID del usuario
  "app": "app_xxxxxxxxxxxx",          // ID de la aplicación  
  "hwid": "abc123def456...",          // HWID del dispositivo
  "sess": "sess_xxxxxxxxxxxx",        // ID de la sesión
  "exp": 1735689600,                  // Fecha de expiración (Unix timestamp)
  "iat": 1735603200,                  // Fecha de emisión
  "iss": "KeyNexus"                    // Emisor del token
}
Tiempo de expiración: Por defecto, los tokens expiran en 24 horas. Puedes configurar esto en los ajustes de tu aplicación.
Validar token en cada peticióncsharp
// El SDK maneja automáticamente la validación del token
var userData = await KeyNexus.GetUserDataAsync();

if (userData.Success)
{
    Console.WriteLine($"Sesión válida para: {userData.Data.Username}");
    Console.WriteLine($"Días restantes: {userData.Data.DaysRemaining}");
}
else if (userData.ErrorCode == "TOKEN_EXPIRED")
{
    // Re-autenticar usuario
    Console.WriteLine("La sesión ha expirado. Por favor, inicia sesión de nuevo.");
}

Gestión de Sesiones

KeyNexus registra y permite gestionar todas las sesiones activas de un usuario:

CampoTipoDescripción
sessionIdstringIdentificador único de la sesión
hwidstringHardware ID del dispositivo
ipstringDirección IP del usuario
locationobjectPaís, ciudad del usuario (geolocalización)
createdAtDateFecha/hora de inicio de sesión
lastActivityDateÚltima actividad registrada
statusstringactive, expired, revoked
Listar y terminar sesionescsharp
// Obtener todas las sesiones del usuario
var sessions = await KeyNexus.GetUserSessionsAsync();

foreach (var session in sessions.Data)
{
    Console.WriteLine($"Sesión: {session.Id}");
    Console.WriteLine($"  IP: {session.Ip}");
    Console.WriteLine($"  Ubicación: {session.Location.City}, {session.Location.Country}");
    Console.WriteLine($"  Última actividad: {session.LastActivity}");
}

// Terminar una sesión específica
await KeyNexus.RevokeSessionAsync("sess_xxxxxxxxxxxx");

// Terminar todas las sesiones excepto la actual
await KeyNexus.RevokeAllSessionsExceptCurrentAsync();

Sistema de Licencias

Generación, validación y gestión de licencias

Tipos de Licencias

Lifetime (Vitalicia)

Sin fecha de expiración. El usuario tiene acceso permanente.

RecomendadoPara productos premium

Time-Based (Temporal)

Expira después de X días/horas desde la activación.

Flexible1 día, 7 días, 30 días, etc.

Subscription (Suscripción)

Se renueva automáticamente. Ideal para modelos SaaS.

RecurrenteMensual, anual

Multi-uso

Permite múltiples activaciones por licencia.

maxUses5, 10, 25 activaciones

¿Cómo funciona maxUses?

El campo maxUses controla cuántas veces puede ser activada una licencia en diferentes dispositivos/HWIDs:

maxUsesComportamiento
1Solo puede activarse en 1 dispositivo. Una vez que un HWID la usa, queda bloqueada.
5Hasta 5 dispositivos diferentes. Útil para usuarios con PC en casa y oficina.
0 o nullUsos ilimitados - cualquier cantidad de dispositivos.
maxUses vs HWID Lock:
HWID Lock (en settings): Una vez activada, SOLO ese HWID puede usarla permanentemente.
maxUses: Cuántos HWIDs diferentes pueden activarla.

Con maxUses: 1 + HWID Lock: true = máxima protección: 1 dispositivo, permanentemente vinculado.

Generación de Licencias

Generar licencias via API (requiere autenticación de dashboard)bash
# Generar una licencia de 30 días
curl -X POST https://keynexus.es/api/licenses/generate \
  -H "Content-Type: application/json" \
  -H "Cookie: token=<tu-session-token>" \
  -d '{
    "applicationId": "<mongodb-object-id>",
    "type": "time-based",
    "duration": 30,
    "quantity": 1,
    "prefix": "PREMIUM"
  }'

# Respuesta
{
  "success": true,
  "message": "1 licencia(s) generada(s)",
  "licenses": [
    {
      "_id": "69323ae1ef49b4fe949c8312",
      "key": "PREMIUM-H8OEL-MR2B7-JIJ5Q",
      "type": "time-based",
      "duration": 30,
      "maxUses": 1,
      "status": "unused"
    }
  ]
}

Formatos de licencia soportados:

XXXXX-XXXXX-XXXXX-XXXXX

Formato estándar (20 caracteres)

PREFIX-XXXXX-XXXXX-XXXXX

Con prefijo personalizado

xxxx-xxxx-xxxx-xxxx-xxxx

Minúsculas (más fácil de leer)

Personalizado

Define tu propio patrón

Validación de Licencias

El proceso de validación verifica múltiples aspectos de la licencia:

Formato válidoLa licencia tiene el formato correcto
Existe en DBLa licencia existe en la base de datos
No expiradaLa fecha de expiración no ha pasado
No revocadaLa licencia no ha sido revocada por el admin
HWID matchSi está bloqueada a HWID, debe coincidir
IP/HWID no en blacklistEl usuario no está en la lista negra
Validar licencia via Client APIbash
# Validar licencia desde tu aplicación
curl -X POST https://keynexus.es/api/client \
  -H "Content-Type: application/json" \
  -d '{
    "action": "license",
    "appId": "Loi0W4jxVWVcnXqy",
    "secretKey": "pjJrdQxtbLLcCLIMsyVZ2iHVMZsm9ZEE",
    "key": "R4KEH-1CXTK-XTOJJ-TKVVF",
    "hwid": "TU-HWID-REAL-DEL-SISTEMA"
  }'

# Respuesta exitosa
{
  "success": true,
  "message": "Licencia válida",
  "license": {
    "type": "lifetime",      // o "time-based"
    "expiresAt": null,       // null para lifetime
    "daysLeft": null         // null para lifetime
  }
}

# Respuesta de error
{
  "success": false,
  "message": "HWID no autorizado"
}
Ejemplo en C# - Flujo completocsharp
// 1. Obtener HWID del sistema
string hwid = GetHWID(); // Ver sección avanzada para implementación

// 2. Validar licencia
var response = await httpClient.PostAsJsonAsync("/api/client", new {
    action = "license",
    appId = "tu-app-id",
    secretKey = "tu-secret-key",
    key = licenseKeyTextBox.Text,
    hwid = hwid
});

var result = await response.Content.ReadFromJsonAsync<LicenseResponse>();

if (result.Success)
{
    // Licencia válida - permitir acceso
    MessageBox.Show($"Bienvenido! Licencia: {result.License.Type}");
    if (result.License.DaysLeft.HasValue)
        MessageBox.Show($"Días restantes: {result.License.DaysLeft}");
}
else
{
    // Error - mostrar mensaje
    MessageBox.Show(result.Message); // "HWID no autorizado", "Licencia expirada", etc.
}

Administración de Licencias

Operaciones disponibles para gestionar licencias desde el dashboard o API:

OperaciónEndpointDescripción
ListarGET /licensesObtener todas las licencias con filtros
CrearPOST /licensesGenerar nuevas licencias
ExtenderPATCH /licenses/:id/extendAñadir tiempo a una licencia
RevocarDELETE /licenses/:idDesactivar una licencia
Reset HWIDPOST /licenses/:id/reset-hwidDesvincular del hardware actual
TransferirPOST /licenses/:id/transferTransferir a otro usuario

Continúa explorando las secciones en el menú lateral →