Multi-tenancy
Auris es una plataforma de gestión de identidad y acceso multi-tenant. Cada despliegue sirve a uno o más tenants, representando cada uno una unidad organizacional aislada con sus propios usuarios, aplicaciones, roles, permisos, políticas de seguridad y branding.
El modelo de tenant de Auris
Un tenant en Auris representa una sola organización, empresa o entorno que usa Auris para autenticación y autorización. Cada tenant obtiene:
- Su propio conjunto de usuarios (ningún usuario se comparte entre tenants por defecto)
- Sus propias aplicaciones (cada una con sus propias credenciales de cliente OAuth)
- Sus propios roles y permisos (RBAC, modelos FGA, custom claims)
- Sus propias políticas de seguridad (aplicación de MFA, políticas de sesión, límites de tasa, reglas de IP, CAPTCHA)
- Su propio branding (logo, colores, nombre de empresa, dominio personalizado)
- Su propia suscripción de facturación (plan, método de pago, facturas)
- Sus propios logs de auditoría (eventos de autenticación, acciones administrativas, cambios de política)
Los tenants son el límite de aislamiento de nivel superior en Auris. Nada se filtra entre tenants.
Un tenant = un realm de Keycloak
Bajo el capó, cada tenant de Auris se mapea exactamente a un realm de Keycloak. Keycloak es el proveedor de identidad que Auris envuelve con su API de nivel superior.
Tenant Auris "acme-corp" ←→ Realm Keycloak "acme-corp"
Tenant Auris "beta-inc" ←→ Realm Keycloak "beta-inc"
Tenant Auris "staging" ←→ Realm Keycloak "staging"Este mapeo proporciona varias garantías:
Aislamiento completo de datos
Los realms de Keycloak están completamente aislados a nivel de base de datos. Los usuarios, clientes, roles, sesiones y credenciales en un realm no son accesibles desde otro realm.
Infraestructura de autenticación separada
Cada realm tiene su propia:
- Endpoints de inicio de sesión y gestión de sesiones
- Cookies de SSO (un usuario con sesión en el realm A no tiene sesión en el realm B)
- Configuraciones de proveedores de identidad (social login, federaciones SAML, OIDC)
- Flujos de autenticación y acciones requeridas
- Políticas de contraseña y gestión de credenciales
Material de clave independiente
Cada realm puede tener sus propias claves de firma para JWTs. Los tokens emitidos para un tenant no pueden verificarse contra el endpoint JWKS de otro tenant.
Aislamiento de datos en detalle
Capa Keycloak
| Datos | Nivel de aislamiento |
|---|---|
| Credenciales de usuario (hashes de contraseña) | Por realm |
| Sesiones de usuario | Por realm |
| Clientes OAuth (aplicaciones) | Por realm |
| Roles de nivel de realm | Por realm |
| Configuraciones de proveedores de identidad | Por realm |
| Flujos de autenticación | Por realm |
Capa Prisma de Auris
Todos los modelos de datos específicos de Auris incluyen un campo tenantId que restringe las consultas:
| Datos | Mecanismo de aislamiento |
|---|---|
| Roles y permisos (RBAC V2) | Campo tenantId en Role, Permission, RolePermission |
| Modelos de autorización FGA | tenantId en AuthorizationModel |
| Tuples de relación FGA | tenantId en RelationshipTuple |
| Actions (hooks personalizados) | tenantId en Action |
| Custom claims | Via applicationId (que pertenece a un tenant) |
Nunca construyas consultas que omitan el filtro tenantId. Todos los repositorios de Auris aplican este filtro automáticamente — si añades consultas personalizadas, asegúrate de incluir siempre WHERE tenant_id = $current_tenant.
Identificación del tenant
Las solicitudes de API incluyen un tenant especificando el encabezado x-tenant:
GET /api/users HTTP/1.1
Host: auth.yourdomain.com
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
x-tenant: acme-corpEl SDK de Auris envía automáticamente este encabezado cuando configuras la opción tenant:
const auris = new AurisClient({
domain: 'auth.yourdomain.com',
clientId: 'app_xxxxx',
tenant: 'acme-corp', // Enviado como x-tenant en todas las solicitudes
})Branding por tenant
Cada tenant puede personalizar completamente la apariencia de sus páginas de login alojadas:
- Logo de la empresa
- Colores primarios y de fondo
- Nombre de la empresa en encabezados y emails
- Dominio personalizado (por ejemplo,
auth.acme.comen lugar deauth.aurisplatform.com) - Plantillas de email personalizadas
El branding se configura en la Consola → Branding y personalización.
Organizaciones dentro de un tenant
Dentro de un tenant, puedes crear organizaciones para modelar estructuras B2B. Las organizaciones son agrupaciones de usuarios dentro de un tenant — no son tenants separados.
Un tenant representa típicamente un cliente de Auris (tu empresa). Las organizaciones dentro de ese tenant representan los clientes de tu empresa.
Consulta la guía de Multi-Tenant B2B para más detalles.