Descripción General
La API de KillB usa JWT (JSON Web Tokens) para autenticación. Todas las solicitudes API deben incluir un token de acceso válido en el encabezado de Authorization.
La autenticación API usa una combinación de login email/contraseña y API keys para diferentes patrones de acceso.
Métodos de Autenticación
JWT Tokens (Principal)
API Keys
Usado para la mayoría de operaciones API. Obtenido via endpoint de login. Mejor para: Aplicaciones web y móviles, operaciones específicas de usuario
Usado para operaciones servidor-a-servidor y webhooks. Mejor para: Servicios backend, operaciones administrativas
Obtener Tus Credenciales
Regístrate en KillB en killb.com
Accede al Dashboard en otc.killb.com
Obtén Credenciales:
Tu email de login y contraseña
Tu API key de la configuración del dashboard
Flujo de Login
Paso 1: Generar Token de Acceso
Solicitud:
Respuesta:
{
"accessToken" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." ,
"expiresIn" : 3600000 ,
"refreshToken" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
curl --request POST \
--url https://teste-94u93qnn.uc.gateway.dev/api/v2/auth/login \
--header 'Content-Type: application/json' \
--data '{
"email": "[email protected] ",
"password": "tu-contraseña"
}'
Paso 2: Usar Token de Acceso
Incluye el token de acceso en el encabezado Authorization para todas las solicitudes API:
Authorization: Bearer TU_ACCESS_TOKEN
Refrescar Tokens
Los tokens de acceso expiran después de 1 hora. Usa el token de refresh para obtener un nuevo token de acceso:
POST /api/v2/auth/refresh
Solicitud:
{
"refreshToken" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Respuesta:
{
"accessToken" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." ,
"refreshToken" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." ,
"expiresIn" : 3600000
}
async function refreshAccessToken ( refreshToken ) {
const response = await fetch ( 'https://teste-94u93qnn.uc.gateway.dev/api/v2/auth/refresh' , {
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({ refreshToken })
});
const data = await response . json ();
return data . accessToken ;
}
Implementa el refresh automático de tokens en tu aplicación para mantener acceso API ininterrumpido.
Mejores Prácticas de Seguridad
Almacenar Credenciales de Forma Segura
Almacena tokens de forma segura
Implementa refresh automático de tokens
Limpia tokens al cerrar sesión
Establece tiempos de expiración apropiados
Siempre usa HTTPS para solicitudes API
Implementa certificate pinning para apps móviles
Valida certificados SSL
Usa conexiones de red seguras
Errores de Autenticación
Respuestas de error comunes de autenticación:
Código de Estado Error Descripción 401No Autorizado Token inválido o expirado 403Prohibido Token válido pero permisos insuficientes 400Solicitud Incorrecta Formato de credenciales inválido
Ejemplo de Respuesta de Error:
{
"errorCode" : "AUTH.0001" ,
"message" : [ "Credenciales inválidas" ],
"statusCode" : "401"
}
Probar Autenticación
Usa el ambiente sandbox para probar la autenticación:
URL Sandbox: https://teste-94u93qnn.uc.gateway.dev
Crea una cuenta de prueba separada para pruebas en sandbox. Las credenciales del sandbox no funcionarán en producción.
Ejemplo: Flujo de Autenticación Completo
Aquí hay un ejemplo completo gestionando el estado de autenticación:
class KillBAuth {
constructor ( email , password ) {
this . email = email ;
this . password = password ;
this . accessToken = null ;
this . refreshToken = null ;
this . baseUrl = 'https://teste-94u93qnn.uc.gateway.dev' ;
}
async login () {
const response = await fetch ( ` ${ this . baseUrl } /api/v2/auth/login` , {
method: 'POST' ,
headers: { 'Content-Type' : 'application/json' },
body: JSON . stringify ({
email: this . email ,
password: this . password
})
});
const data = await response . json ();
this . accessToken = data . accessToken ;
this . refreshToken = data . refreshToken ;
return data ;
}
async refresh () {
const response = await fetch ( ` ${ this . baseUrl } /api/v2/auth/refresh` , {
method: 'POST' ,
headers: { 'Content-Type' : 'application/json' },
body: JSON . stringify ({
refreshToken: this . refreshToken
})
});
const data = await response . json ();
this . accessToken = data . accessToken ;
this . refreshToken = data . refreshToken ;
return data ;
}
getAuthHeaders () {
return {
'Authorization' : `Bearer ${ this . accessToken } ` ,
'Content-Type' : 'application/json'
};
}
}
// Uso
const auth = new KillBAuth ( '[email protected] ' , 'tu-contraseña' );
await auth . login ();
// Hacer solicitud autenticada
const response = await fetch ( ` ${ auth . baseUrl } /api/v2/users` , {
headers: auth . getAuthHeaders ()
});
Próximos Pasos