[{"data":1,"prerenderedAt":235},["ShallowReactive",2],{"seo-verification":3,"blog-zitadel-vps-sso-multi-tenant-sin-keycloak-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-zitadel-vps-sso-multi-tenant-sin-keycloak-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":30,"ctaBody":30,"ctaButton":153,"ctaUrl":154,"relatedPosts":155},435,"zitadel-vps-sso-multi-tenant-sin-keycloak",{"fr":12,"en":13,"ar":14,"es":10},"zitadel-sso-self-hosted-vps","self-hosting-zitadel-vps-multi-tenant-sso","استضافة-zitadel-على-vps-sso-متعدد-المستأجرين","Alojar ZITADEL en un VPS: SSO multi-tenant sin Keycloak","Despliega ZITADEL en tu VPS con Docker Compose: IAM cloud-native en Go, multi-tenancy nativo, OIDC, OAuth2, SAML y Passkeys, sin la complejidad de Keycloak.",14,0,false,"2026-10-12T00:00:00+00:00","2026-10-13T14:10:28+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Seguridad y monitorización","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fzitadel-sso-self-hosted-vps-poster.svg",{"categorySlug":34,"appSlug":35},"ciberseguridad-bastion","zitadel","ZITADEL es un proveedor de identidad cloud-native escrito en Go, diseñado desde el principio para equipos B2B que gestionan múltiples clientes o proyectos distintos. Mientras Keycloak exige configurar un realm por tenant — con todo el riesgo de deriva de configuración que ello implica — y Authentik trata el multi-tenancy como una característica adicional, ZITADEL coloca las organizaciones y los proyectos en el núcleo de su modelo de datos. Cada tenant tiene sus propios usuarios, sus propias reglas de autenticación y sus propias aplicaciones, sin interferir jamás con los vecinos.\n\nSu huella de memoria es la de un binario Go — de 150 a 300 MB para el stack completo con PostgreSQL, frente a los 512 MB a 1 GB de JVM de Keycloak en reposo. Soporta OIDC, OAuth2, SAML 2.0, LDAP y Passkeys WebAuthn desde la versión 2.x, con una API gRPC\u002FREST que permite automatizar por completo la gestión de tenants.",[38,42,54,57,91,94,97,143,147,150],{"type":39,"title":40,"body":41},"h2","ZITADEL vs Keycloak vs Authentik: cuál elegir para un SaaS B2B","Keycloak es el estándar histórico, rico en funciones y respaldado por Red Hat. Su problema para un VPS self-hosted: la JVM. En reposo, Keycloak consume entre 512 MB y 1 GB de RAM, y cada realm es un árbol de configuración separado que mantener. La semana 38 de 2026 ilustró el riesgo: seis CVEs corregidas en dos releases consecutivas, incluidos dos DoS no autenticados en los endpoints SAML y de login.\n\nAuthentik (2026.8.2) es la elección natural para equipos que quieren un IdP completo con interfaz gráfica, flujos visuales y provisionamiento SCIM. Está escrito en Python\u002FDjango y requiere al menos 1 GB de RAM utilizable.\n\nZITADEL (v2.x, Go) es el único de los tres que diseñó el multi-tenancy como primitiva de primera clase. Una instalación única expone organizaciones independientes — cada cliente obtiene su espacio aislado sin duplicación de configuración. Para una agencia que aloja diez clientes en un único VPS, es la diferencia entre diez archivos de configuración de Keycloak y una API que lo orquesta todo.",{"type":43,"title":44,"items":45},"ul","Por qué ZITADEL destaca para uso en agencias y SaaS B2B",[46,47,48,49,50,51,52,53],"**Multi-tenancy nativo**: organizaciones y proyectos son primitivas del modelo de datos, no soluciones alternativas — cada cliente obtiene un espacio aislado sin duplicación de configuración","**Escrito en Go**: binario único, inicio en segundos, huella de memoria de 150 a 300 MB stack completo frente a 512 MB a 1 GB de JVM","**OIDC, OAuth2, SAML 2.0 y LDAP**: todos los protocolos empresariales en una sola instalación","**Passkeys y WebAuthn nativos desde v2**: cada organización puede imponer Passkeys como único factor de autenticación sin plugins","**API-first gRPC\u002FREST**: toda operación disponible en la consola lo está también vía API — provisionar un tenant o crear una aplicación OIDC en pocas líneas de script","**Acciones (webhooks\u002Fcódigo)**: lógica personalizada disparada en eventos de autenticación sin modificar el core","**Despliegue sin estado de aplicación**: ZITADEL almacena todo en PostgreSQL — sin caché distribuida, sin volúmenes adicionales","**Licencia Apache 2.0**: el núcleo es completamente open source sin funciones críticas ocultas tras una licencia Enterprise",{"type":39,"title":55,"body":56},"Prerequisitos: servidor, Docker y DNS","La configuración mínima recomendada por el equipo para un despliegue en producción es **2 vCPU y 4 GB de RAM** — de los cuales unos 300 MB serán utilizados por ZITADEL mismo, el resto yendo a PostgreSQL y otros servicios.\n\n**Software requerido:** Docker Engine 24+ y Docker Compose v2. Los puertos 80 y 443 deben estar abiertos (nginx terminará el TLS). Un nombre de dominio apuntando a la IP de tu VPS — ZITADEL requiere un FQDN incluso en desarrollo, ya que las cookies OIDC están vinculadas al dominio.\n\n**Base de datos:** PostgreSQL 15 o 16. ZITADEL también soporta CockroachDB para despliegues de alta disponibilidad, pero en un VPS de un único nodo, PostgreSQL es la elección natural.",{"type":58,"title":59,"steps":60},"steps","Desplegar ZITADEL con Docker Compose y PostgreSQL",[61,64,67,70,73,76,79,82,85,88],{"title":62,"body":63},"Crear la estructura de directorios","Conéctate a tu VPS por SSH y crea los directorios necesarios:\n```bash\nmkdir -p \u002Fopt\u002Fzitadel\u002F{config,certs}\ncd \u002Fopt\u002Fzitadel\n```",{"title":65,"body":66},"Crear el archivo .env con los secretos","```bash\ncat > \u002Fopt\u002Fzitadel\u002F.env \u003C\u003CEOF\nPOSTGRES_PASSWORD=$(openssl rand -base64 32 | tr -d '\\n')\nZITADEL_MASTERKEY=$(openssl rand -base64 32 | tr -d '\\n' | head -c 32)\nZITADEL_DOMAIN=sso.tu-dominio.com\nEOF\n```\nEl `MASTERKEY` debe tener exactamente 32 caracteres.",{"title":68,"body":69},"Escribir el docker-compose.yml","Crea `\u002Fopt\u002Fzitadel\u002Fdocker-compose.yml` con los servicios PostgreSQL y ZITADEL, configurando la conexión a la base de datos mediante variables de entorno y exponiendo el puerto 8080 para nginx.",{"title":71,"body":72},"Configurar nginx como reverse proxy TLS","Crea un bloque de servidor nginx para `sso.tu-dominio.com` que redirija HTTP a HTTPS y proxee las peticiones a `http:\u002F\u002F127.0.0.1:8080`. Establece la cabecera `X-Forwarded-Proto: https`. Obtén el certificado Let's Encrypt con Certbot.",{"title":74,"body":75},"Iniciar el stack ZITADEL","```bash\ncd \u002Fopt\u002Fzitadel\ndocker compose up -d\ndocker compose logs -f zitadel\n```\nEspera el mensaje `server is listening on [::]:8080` en los logs — generalmente tarda de 30 a 60 segundos.",{"title":77,"body":78},"Recuperar las credenciales de administrador iniciales","```bash\ndocker compose logs zitadel 2>&1 | grep -A 5 'initial'\n```\nLas credenciales se muestran solo una vez. Guárdalas en tu gestor de secretos.",{"title":80,"body":81},"Iniciar sesión en la consola de administración","Abre `https:\u002F\u002Fsso.tu-dominio.com\u002Fui\u002Fconsole` en un navegador. Inicia sesión con las credenciales recuperadas en el paso anterior.",{"title":83,"body":84},"Crear tu primera organización cliente","En la consola, ve a **Organización → Nueva organización**. Dale el nombre de tu cliente. ZITADEL crea automáticamente un espacio aislado — los usuarios de esta organización no pueden ver los de las demás.",{"title":86,"body":87},"Crear un proyecto y una aplicación OIDC","En la organización, ve a **Proyectos → Nuevo proyecto**. Crea una **Aplicación web** de tipo **OIDC**. ZITADEL te pedirá el tipo de cliente y las URLs de redirección. Generará un `Client ID` y un `Client Secret`.",{"title":89,"body":90},"Verificar el estado y fijar la versión de la imagen","```bash\ncurl -s https:\u002F\u002Fsso.tu-dominio.com\u002Fhealthz | jq .\n```\nUna respuesta `{\"status\": \"pass\"}` confirma que ZITADEL responde correctamente. Fija la etiqueta de versión en `docker-compose.yml` — `stable` sigue el último release, lo que puede introducir cambios no planificados en producción.",{"type":39,"title":92,"body":93},"Configurar la autenticación OIDC para tus aplicaciones","Una vez ZITADEL en marcha y una aplicación OIDC creada, la configuración del lado del cliente es estándar — cualquier biblioteca OIDC (passport.js, next-auth, python-oidc, etc.) funciona sin adaptación específica de ZITADEL.\n\nParámetros OIDC esenciales:\n```\nISSUER=https:\u002F\u002Fsso.tu-dominio.com\nCLIENT_ID=\u003Cclient_id_generado>\nCLIENT_SECRET=\u003Cclient_secret_generado>\nREDIRECT_URI=https:\u002F\u002Ftu-app.com\u002Fcallback\nSCOPES=openid profile email\n```\n\nEl Discovery Document está disponible en `https:\u002F\u002Fsso.tu-dominio.com\u002F.well-known\u002Fopenid-configuration`. Para SPAs (React, Vue), usa el flujo PKCE sin secreto en el lado del cliente.",{"type":39,"title":95,"body":96},"Modelo multi-tenant: organizaciones, proyectos y aplicaciones","El modelo de datos de ZITADEL se articula en tres niveles que corresponden exactamente a las necesidades de una agencia o SaaS B2B.\n\n**La organización** es el contenedor de un tenant. Cada organización tiene sus propios usuarios, sus propios IdP externos y sus propias políticas de contraseña. Puede ser administrada por un delegado de la organización — tu cliente — sin que eso le dé acceso a las demás organizaciones.\n\n**El proyecto** agrupa las aplicaciones de un único producto. Un proyecto puede contener una aplicación web, una aplicación móvil y una API — todas compartiendo los mismos roles y permisos, definidos una sola vez a nivel de proyecto.\n\n**La aplicación** representa un cliente OIDC, OAuth2 o SAML específico. Este modelo permite a una agencia gestionar diez clientes en una única instalación de ZITADEL sin ningún riesgo de contaminación entre tenants.",{"type":98,"title":99,"headers":100,"rows":105},"comparison","ZITADEL vs Authentik vs Keycloak — comparativa técnica",[101,102,103,104],"Criterio","ZITADEL v2.x","Authentik 2026.8","Keycloak 26.7",[106,111,116,121,124,129,133,138],[107,108,109,110],"Lenguaje \u002F runtime","Go — binario único","Python + Rust (frontend)","Java (JVM)",[112,113,114,115],"RAM stack completo (reposo)","150 – 300 MB","~1 GB (worker + PostgreSQL)","512 MB – 1 GB (solo JVM)",[117,118,119,120],"Multi-tenancy nativo","Sí — primitiva Organizaciones","Parcial — tenants separados","Parcial — realms separados",[122,123,123,123],"OIDC \u002F OAuth2 \u002F SAML","Sí — los tres nativos",[125,126,127,128],"Passkeys \u002F WebAuthn","Sí, nativo v2","Sí (2026.2+)","Sí (v21+)",[130,131,132,132],"API-first","gRPC + REST, cobertura 100%","REST parcial",[134,135,136,137],"Interfaz de administración","Consola web + API","UI completa con flujos visuales","UI completa, configuración XML",[139,140,141,142],"Licencia","Apache 2.0 (núcleo)","MIT (Community) \u002F Enterprise","Apache 2.0",{"type":144,"title":145,"body":146},"tip","Activar Passkeys y MFA en ZITADEL v2","ZITADEL v2 ofrece Passkeys WebAuthn como factor de autenticación principal — no solo como segundo factor. Para activarlos en una organización:\n\n1. En la consola, abre **Organización → Política de seguridad → Política MFA**\n2. Activa **Passkeys** (WebAuthn sin contraseña) y selecciona **Forzar** si quieres que todos los usuarios de esta organización utilicen únicamente Passkeys\n3. Para una política más flexible: permite tanto Passkeys como TOTP — el usuario elige durante el registro\n\nZITADEL también soporta TOTP estándar (Google Authenticator, cualquier app compatible con RFC 6238) y claves de seguridad físicas U2F\u002FFIDO2 (YubiKey, etc.) para despliegues empresariales.",{"type":39,"title":148,"body":149},"Solución de problemas: errores frecuentes de ZITADEL en Docker","**`masterkey must be 32 characters`**: usa `openssl rand -hex 16` (32 caracteres hex = 16 bytes) para obtener una clave de longitud exacta.\n\n**`connection refused` en el puerto 8080 mientras el contenedor está en marcha**: ZITADEL solo responde en `:8080` cuando las migraciones están completas — `start-from-init` en una base vacía puede tardar de 30 a 90 segundos. Espera el log `server is listening on [::]:8080`.\n\n**Bucle de redirección HTTP\u002FHTTPS**: verifica que `proxy_set_header X-Forwarded-Proto https` esté en el bloque `location \u002F` de nginx.\n\n**`invalid_client` durante el flujo OIDC**: verifica que la URL de redirección declarada en la aplicación ZITADEL coincida exactamente con la que envía tu aplicación — ZITADEL es estricto en la coincidencia.\n\n**PostgreSQL rechaza la conexión**: reinicia ZITADEL con `docker compose restart zitadel`. Usa `restart: on-failure:5` para absorber los retrasos de inicio.\n\n**Pérdida de credenciales de administrador iniciales**: elimina la base de datos (`docker compose down -v`) y reinicia `start-from-init`. En producción, crea inmediatamente una segunda cuenta de administrador.",{"type":39,"title":151,"body":152},"Próximo paso: profundiza en tu stack SSO auto-alojado","ZITADEL en producción en un VPS es un excelente primer paso. Para ir más lejos:\n\n- **[Desplegar ZITADEL en VPS — guía avanzada](\u002Fdeployer-zitadel-vps)**: certificados TLS automáticos con Let's Encrypt, backup de PostgreSQL a S3 y actualizaciones sin downtime.\n- **[Authentik vs Authelia: ¿qué SSO self-hosted para tu VPS?](\u002Fauthentik-vs-authelia-sso-self-hosted)**: si tu caso de uso es menos orientado a multi-tenancy y más a proxy de autenticación.\n- **[Migrar de Keycloak a Authelia o ZITADEL](\u002Fkeycloak-cves-semaine-38-migrer-authelia-zitadel-vps)**: las seis CVEs de la semana 38 analizadas y el camino de migración concreto desde un realm Keycloak existente.\n- **[Auto-alojar Authelia en VPS](\u002Fself-host-authelia-vps)**: si buscas una pasarela de autenticación ultra-ligera (menos de 30 MB) en lugar de un IdP completo.\n\nUn VPS con 4 GB de RAM, acceso root e IPv4 dedicada cubre cómodamente ZITADEL en producción con margen para las aplicaciones que protege.","Voir les VPS Cloud","\u002Fvps-cloud",[156,178,200,218],{"id":157,"slug":158,"slugs":159,"title":163,"excerpt":164,"readTime":165,"views":18,"isPinned":19,"publishedAt":166,"updatedAt":167,"category":168,"categories":174,"featuredImage":30,"bgImage":31,"posterImage":176,"relatedSolution":177},351,"instalar-zitadel-vps-iam-codigo-abierto-desarrolladores",{"fr":160,"en":161,"ar":162,"es":158},"deployer-zitadel-vps","self-host-zitadel-vps-open-source-iam-developers","zitadel-vps-iam-maftouh-almassdar-lilmutatawireen","ZITADEL en VPS: IAM de código abierto para desarrolladores","Despliegue ZITADEL self-hosted en un VPS: OIDC, OAuth 2.0, passkeys y multi-tenancy nativo con Docker Compose en menos de 5 minutos.",3,"2026-01-08T00:00:00+00:00","2026-09-16T14:44:13+00:00",{"id":169,"name":170,"slug":171,"color":172,"icon":173},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[175],{"id":169,"name":170,"slug":171,"color":172,"icon":173},"\u002Fblog\u002Fcovers\u002Fdeployer-zitadel-vps-poster.svg",{"categorySlug":27,"appSlug":35},{"id":179,"slug":180,"slugs":181,"title":185,"excerpt":186,"readTime":187,"views":18,"isPinned":19,"publishedAt":188,"updatedAt":189,"category":190,"categories":195,"featuredImage":30,"bgImage":31,"posterImage":197,"relatedSolution":198},423,"authentik-vs-authelia-sso-comparativa-vps",{"fr":182,"en":183,"ar":184,"es":180},"authentik-vs-authelia-sso-self-hosted","authentik-vs-authelia-sso-comparison-vps","authentik-مقابل-authelia-sso-مستضاف-ذاتيا-vps","Authentik vs Authelia: ¿qué SSO autoalojado elegir para su VPS?","¿Authentik o Authelia para su SSO autoalojado? Comparativa técnica: protocolos OIDC\u002FSAML, huella de RAM, arquitectura y casos de uso para tomar la decisión correcta.",9,"2026-10-08T00:00:00+00:00","2026-10-08T23:30:51+00:00",{"id":191,"name":192,"slug":193,"color":194,"icon":193},5,"Comparativas","comparatif","bg-info\u002F10 text-info",[196],{"id":191,"name":192,"slug":193,"color":194,"icon":193},"\u002Fblog\u002Fcovers\u002Fauthentik-vs-authelia-sso-self-hosted-poster.svg",{"categorySlug":34,"appSlug":199},"authentik",{"id":201,"slug":202,"slugs":203,"title":207,"excerpt":208,"readTime":209,"views":18,"isPinned":19,"publishedAt":210,"updatedAt":211,"category":212,"categories":213,"featuredImage":30,"bgImage":31,"posterImage":215,"relatedSolution":216},372,"keycloak-cves-semana-38-migrar-authelia-zitadel-vps",{"fr":204,"en":205,"ar":206,"es":202},"keycloak-cves-semaine-38-migrer-authelia-zitadel-vps","keycloak-cves-week-38-migrate-authelia-zitadel-vps","ثغرات-keycloak-الأسبوع-38-هجرة-إلى-authelia-zitadel","Keycloak v26.7.4: 6 CVEs — migrar a Authelia o ZITADEL","Keycloak v26.7.4 parchea 6 CVEs incluidos dos DoS no autenticados. Para menos de 10 apps SSO en VPS, Authelia (\u003C 30 MB) o ZITADEL reducen la superficie de ataque.",12,"2026-09-23T00:00:00+00:00","2026-09-23T15:23:17+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[214],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fkeycloak-cves-semaine-38-migrer-authelia-zitadel-vps-poster.svg",{"categorySlug":34,"appSlug":217},"authelia",{"id":219,"slug":220,"slugs":221,"title":225,"excerpt":226,"readTime":227,"views":165,"isPinned":19,"publishedAt":228,"updatedAt":229,"category":230,"categories":231,"featuredImage":30,"bgImage":31,"posterImage":233,"relatedSolution":234},162,"alojar-authelia-en-un-vps",{"fr":222,"en":223,"ar":224,"es":220},"self-host-authelia-vps","self-host-authelia-on-a-vps-mfa-and-sso-for-your-whole-stack","استضافة-authelia-على-vps-مصادقة-ثنائية-ودخول-موحد-لمنظومتك","Alojar Authelia en un VPS: MFA y SSO para todo tu stack","Despliega Authelia en VPS con Docker Compose: TOTP, WebAuthn\u002Fpasskey, OIDC, migración LLDAP, monitoreo Prometheus y comparativa con Authentik.",10,"2026-07-04T00:00:00+00:00","2026-09-24T12:27:51+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[232],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-authelia-vps-poster.svg",{"categorySlug":27,"appSlug":217},1791901125564]