Saltar al contenido principal

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

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

Obtener Tus Credenciales

  1. Regístrate en KillB en killb.com
  2. Accede al Dashboard en otc.killb.com
  3. 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

POST /api/v2/auth/login
Solicitud:
{
  "email": "[email protected]",
  "password": "tu-contraseña"
}
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

  • Nunca hagas commit de credenciales en control de versiones
  • Usa variables de entorno para API keys y tokens
  • Rota las API keys regularmente
  • Usa servicios de gestión de secretos
  • 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 EstadoErrorDescripción
401No AutorizadoToken inválido o expirado
403ProhibidoToken válido pero permisos insuficientes
400Solicitud IncorrectaFormato 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