Skip to main content

Autenticación

La API usa Auth0 como proveedor de identidad principal, con tokens JWT validados mediante JWKS. Además, soporta autenticación por API Key para integraciones y un flujo especial para la app mobile.

Flujos de autenticación

Auth0 (flujo principal)

Claims personalizados del JWT de Auth0: Primer login: Si el usuario no existe en la base de datos, se crea automáticamente. Si ya existe un usuario con el mismo email, se vincula el auth0_id. El avatar se sube a Cloudinary si es necesario. Una fila por persona: el email es la clave estable, no el sub. Una misma persona puede tener varias identidades en Auth0 (Google y usuario/contraseña), y cada una trae un sub distinto; users.auth0_id guarda la última que entró y se reengancha sola vía UsersService.findByAuth0IdOrEmail. Todo lo demás —tickets, chat, dispositivos— cuelga de users.id, así que cambiar de forma de entrar nunca parte los datos de una persona. La unicidad del email es insensible a mayúsculas (índice sobre lower(email), migración 175). Los permisos (tools) viven en app_metadata de cada identidad de Auth0, no en la base de datos. Si una persona acumula dos identidades, cada una lleva sus propios permisos: por eso el tenant tiene una post-login action que las vincula por email verificado, y por eso al asignar una tool se aplica a todas las identidades con ese email.

API Key

Usado para integraciones del sistema (webhooks, n8n, creación de propiedades externas).

Mobile (vivla-mobile)

Combinado (Auth0 o API Key)

El guard Auth0OrApiKeyGuard intenta primero API Key (más rápido), luego Auth0 JWT. Usado en endpoints como inbox messages que pueden recibir requests de usuarios autenticados o de integraciones.

Guards disponibles

Decoradores

Jerarquía de permisos de herramientas

El ToolAccessGuard implementa una jerarquía de acceso:
Si un endpoint requiere nivel editor, un usuario con nivel admin también tiene acceso. Los permisos se obtienen de:
  1. Claims del JWT de Auth0 (https://auth.vivla.com/tools)
  2. Metadata del usuario en la base de datos
Ambas fuentes se combinan (merge) al validar el token.

Objeto de usuario autenticado

El cache de usuarios tiene un TTL de 5 minutos. Las signing keys de JWKS se cachean por 10 minutos. Esto optimiza el rendimiento evitando consultas a Auth0 y a la base de datos en cada request.