Saltar al contenido principal

Multi-Tenancy (API)

Console aplica multi-tenancy a través de tokens JWT y filtrado automático de datos.

Contexto del Tenant en JWT

Cada token JWT contiene el company_id, que identifica al tenant (organización cliente):

{
"sub": "user_id",
"user_id": "507f1f77bcf86cd799439011",
"company_id": "507f1f77bcf86cd799439012",
"email": "[email protected]",
"is_owner": false,
"token_type": "access"
}

Aislamiento de Datos

Todas las solicitudes a la API filtran automáticamente por company_id del JWT:

// Tu solicitud:
GET /v1/users

// La API internamente consulta:
db.users.find({ company_id: jwt.company_id })

No puedes acceder a datos de otras compañías, incluso con IDs válidos.

Protección Entre Compañías

Si intentas acceder a un recurso de otra compañía:

GET /v1/users/507f1f77bcf86cd799439099
# El usuario pertenece a company_id: XXXXXXX

# Respuesta: 404 Not Found
# (Aunque el usuario existe, no está en tu compañía)

Esto aplica a todos los recursos:

  • Usuarios
  • Grupos
  • Permisos
  • Configuraciones
  • Cualquier dato con alcance de compañía

Cómo Funciona

  1. Autenticación: El usuario inicia sesión con slug de compañía y credenciales
  2. Generación de JWT: La API crea un JWT con company_id
  3. Procesamiento de Solicitudes: Cada llamada a la API incluye el JWT en el header Authorization
  4. Filtrado Automático: El middleware de la API extrae company_id y filtra todas las consultas
  5. Aislamiento Aplicado: Los usuarios solo pueden ver y modificar datos de su compañía

Mejores Prácticas

1. Siempre Incluye el Header de Authorization

curl -H "Authorization: Bearer <your_jwt_token>" \
https://api.console.solucao42.com.br/v1/users

2. No Codifiques Company IDs

El company_id se extrae automáticamente del JWT. Nunca intentes sobrescribirlo en tus solicitudes.

// ❌ MAL: Intentando especificar company_id
POST /v1/users
{
"email": "[email protected]",
"company_id": "some-other-company" // Esto será ignorado/rechazado
}

// ✅ BIEN: Deja que la API maneje company_id
POST /v1/users
{
"email": "[email protected]"
// company_id se establece automáticamente desde el JWT
}

3. Maneja Errores 404 Correctamente

Una respuesta 404 puede significar:

  • El recurso no existe
  • El recurso existe pero pertenece a otra compañía

Ambos casos deben tratarse igual: el recurso no es accesible.

Garantías de Seguridad

Console proporciona:

  • Aislamiento automático: Todas las consultas se filtran por company_id
  • Sin acceso entre tenants: No se puede acceder a datos de otras compañías
  • Aplicación en middleware: El aislamiento se aplica en la capa de API
  • Filtrado a nivel de base de datos: Todas las consultas incluyen filtro de company_id
Para Usuarios del Producto

Aprende sobre conceptos de multi-tenancy en la interfaz: Guía de Multi-Tenancy.