Durante mucho tiempo tuve el mismo problema que creo que tiene casi todo el que monta un homelab con más de cuatro o cinco servicios: una contraseña diferente para cada cosa. Proxmox con su usuario, Grafana con el suyo, Portainer con otro, y así hasta llegar a tener un documento con 20 credenciales que actualizaba de forma irregular. Cuando instalaba un servicio nuevo, pensaba un momento y escribía alguna variación de siempre la misma contraseña. Mal hábito.
Authentik resolvió eso. Un solo login para todo, con autenticación de dos factores en un único sitio, y un portal desde el que veo de un vistazo todos los servicios que tengo disponibles. Llevo más de un año usándolo y no lo cambiaría por nada.
Qué es Authentik y qué no es#
Authentik es un proveedor de identidad (Identity Provider o IdP) que puedes alojar tú mismo. Funciona como el equivalente self-hosted de lo que hacen servicios como Auth0, Okta o Keycloak. La idea central es que tus aplicaciones no gestionan usuarios ni contraseñas ellas mismas, sino que delegan esa responsabilidad en Authentik.
Cuando accedes a, por ejemplo, tu instancia de Grafana, en lugar de escribir usuario y contraseña en Grafana, te redirige a Authentik, introduces tus credenciales ahí, y si son correctas, Authentik le dice a Grafana que puedes entrar. Grafana nunca ve tu contraseña. Este flujo es OAuth2 u OIDC según la aplicación, y también hay soporte para SAML y LDAP.
Lo que no es: un proxy de autenticación del estilo Authelia o Vouch. Esas herramientas funcionan como capa delante de nginx o Traefik y bloquean acceso a cualquier servicio que no tenga autenticación propia. Authentik puede hacer algo parecido con su proxy provider, pero su punto fuerte real es la integración nativa con aplicaciones que soportan OAuth2 o LDAP.
Si tienes servicios que no tienen ningún sistema de login (un servicio interno solo accesible desde tu red, por ejemplo), Authelia o el proxy provider de Authentik son más adecuados. Cuando tienes aplicaciones con soporte nativo para OAuth2 y LDAP, Authentik brilla.
Por qué Authentik en vez de Keycloak#
Keycloak es la referencia en el mundo enterprise. Lo usa mucha gente, tiene una comunidad enorme, y hay documentación para todo. También tiene una interfaz de administración que parece diseñada para hacer sentir mal a los que no somos consultores de identidad certificados.
Authentik tiene una curva de aprendizaje más suave, una interfaz moderna, y está construido pensando en homelabs y entornos pequeños sin sacrificar funcionalidades. El rendimiento con pocos usuarios es mucho mejor que Keycloak, que necesita bastante RAM para funcionar cómodamente.
Dicho esto, si tu empresa ya usa Keycloak o necesitas algo muy específico del mundo enterprise, Keycloak puede tener más sentido. Para homelab, Authentik es la elección habitual y con razón.
Requisitos antes de empezar#
Necesitas:
- Docker y Docker Compose funcionando
- Un dominio con subdominio configurado (por ejemplo, auth.mi-homelab.local o un dominio real)
- Un reverse proxy como Nginx Proxy Manager o Traefik para gestionar los certificados SSL
- Ganas de configurar varias cosas a la vez
Authentik requiere dos servicios además del servidor principal: Redis (para caché y sesiones) y PostgreSQL (para la base de datos). El compose oficial los incluye todos.
El consumo de memoria en reposo ronda los 500-600 MB con PostgreSQL, Redis y el servidor de Authentik. No es ligero, pero tampoco es exagerado para lo que ofrece. En una máquina con 2 GB de RAM puede funcionar si no tienes muchos otros servicios compitiendo. Con 4 GB va bien.
Instalación con Docker Compose#
El proyecto ofrece un archivo compose con todo lo necesario. Primero, descarga el archivo de entorno de ejemplo:
| |
Antes de levantarlo, necesitas generar una clave secreta y una contraseña para PostgreSQL:
| |
El archivo .env con esas variables es lo más importante que tienes que proteger y hacer backup. Sin la clave secreta no puedes recuperar la instalación. Yo lo tengo en mi gestor de contraseñas y en un backup cifrado separado.
El docker-compose.yml de Authentik tiene esta estructura básica (simplificada):
| |
Con el archivo listo:
| |
La primera vez tarda un par de minutos mientras PostgreSQL inicializa la base de datos. Puedes ver el progreso con docker compose logs -f server.
Configuración inicial#
Una vez que los contenedores están en marcha, accede a http://tu-servidor:9000/if/flow/initial-setup/ para crear el usuario administrador. Solo funciona esta vez, en el primer arranque.
La interfaz de administración está en /if/admin/. El portal de usuario (lo que verán los usuarios normales) está en /if/user/.
Lo primero que conviene hacer antes de tocar nada más es configurar el dominio correcto. En Configuración del sistema, asegúrate de poner la URL pública que va a usar Authentik. Esto afecta a los redirects de OAuth2 y a los correos de verificación.
Integrar Proxmox con LDAP#
Una de las integraciones más útiles para homelab es usar Authentik como servidor LDAP para que Proxmox autentique contra él. Así puedes entrar a Proxmox con tu usuario de Authentik en lugar de los usuarios locales de PVE.
En Authentik, primero activa el outpost LDAP. Ve a Aplicaciones > Outposts y crea un outpost de tipo LDAP. El outpost expone un servidor LDAP que escucha por defecto en el puerto 389.
Luego en Proxmox, ve a Datacenter > Permissions > Authentication y añade un servidor LDAP:
- Servidor: IP de tu máquina donde corre Authentik
- Puerto: 389
- Base DN:
DC=ldap,DC=goauthentik,DC=io - Bind user:
cn=ldapservice,ou=serviceaccounts,DC=ldap,DC=goauthentik,DC=io - Bind password: el token del service account que creas en Authentik
Para el service account en Authentik: ve a Administración > Directorio > Usuarios y crea un usuario con el nombre ldapservice. Genera un token para ese usuario. Ese token es la contraseña del bind user en Proxmox.
Después de guardar, puedes sincronizar usuarios y asignarles permisos en Proxmox. Tus usuarios de Authentik aparecerán disponibles en Datacenter > Permissions para asignarles roles.
Integrar Grafana con OAuth2#
Grafana tiene soporte nativo para OIDC (que Authentik soporta). La configuración es más limpia que LDAP porque Grafana gestiona directamente los roles según lo que le diga Authentik.
En Authentik, crea una nueva aplicación y un OAuth2/OpenID Connect provider:
- Nombre: Grafana
- Client ID: genera uno o escribe uno descriptivo (por ejemplo,
grafana) - Client Secret: genera uno seguro
- Redirect URIs:
https://grafana.tu-dominio.com/login/generic_oauth - Scopes: openid, email, profile
Guarda el Client ID y el Client Secret. En la configuración de Grafana (grafana.ini o las variables de entorno del contenedor Docker):
| |
Cuando reinicias Grafana aparece el botón “Sign in with Authentik” en la pantalla de login. Al hacer clic te redirige a Authentik, introduces tus credenciales ahí, y vuelves a Grafana ya autenticado.
Una cosa que me costó encontrar: si quieres que usuarios de Authentik sean administradores en Grafana automáticamente, necesitas configurar el mapeo de roles. En el provider de Authentik puedes añadir claims personalizados, y en Grafana configurar role_attribute_path para leer ese claim. La documentación de Grafana sobre esto es bastante clara.
Activar MFA#
Una de las razones principales para usar Authentik es centralizar el segundo factor. En lugar de configurar TOTP en cada aplicación por separado, lo configuras una vez en Authentik y protege todos los servicios al mismo tiempo.
Ve a Flujos > Flujos de autenticación y edita el flujo de autenticación por defecto. Ahí puedes añadir una etapa de MFA que pida el código TOTP después de las credenciales.
Los usuarios pueden configurar su propio TOTP desde el portal de usuario (/if/user/). También hay soporte para WebAuthn (llaves de hardware como YubiKey) si quieres algo más robusto que TOTP.
La primera vez que un usuario con MFA obligatorio intente entrar, Authentik le pedirá que configure su segundo factor antes de dejarle pasar. El flujo de enrollment está incluido y no necesitas configurar nada adicional para que funcione.
El portal de aplicaciones#
Una vez que tienes varias aplicaciones integradas, el portal de usuario se convierte en algo útil. Cada aplicación aparece como una tarjeta con su icono y nombre. Un clic te lleva directo al servicio ya autenticado.
Para que las aplicaciones aparezcan en el portal, tienen que tener marcada la opción “Launch URL” en la configuración de la aplicación en Authentik. También puedes subir un icono personalizado para cada una, lo que hace el portal bastante más manejable visualmente que una lista de URLs en el navegador.
Puedes hacer el portal público (accesible sin autenticación, para que los usuarios puedan ver qué servicios existen) o privado (solo visible después de autenticarse). Para homelab personal, privado tiene más sentido.
Lo que no funciona perfectamente#
Hay algunos servicios que tienen problemas con Authentik o que requieren configuración adicional:
Proxmox con OAuth2 nativo: Proxmox 8 añadió soporte para OpenID Connect directamente, sin necesitar pasar por LDAP. En teoría es la opción más limpia. En la práctica me encontré con que los redirects fallaban con algunas versiones. LDAP funciona sin problemas, así que acabé quedándome con eso.
Servicios que solo soportan autenticación básica: algunos servicios muy viejos o muy simples no soportan ningún estándar moderno. Para esos, el proxy provider de Authentik puede añadir autenticación delante, pero no es tan integrado como OAuth2.
Las actualizaciones requieren atención: Authentik actualiza con frecuencia y alguna versión ha tenido migraciones de base de datos que tardaban varios minutos. No es dramático, pero hay que planificar las actualizaciones en momentos donde puedas tolerar unos minutos de downtime en la autenticación.
Backup de Authentik#
Si pierdes Authentik sin backup, pierdes acceso a todos los servicios que autentican contra él. Es el punto más crítico del homelab. Mi estrategia:
El backup mínimo son dos cosas: el archivo .env con las claves secretas, y el volumen de PostgreSQL. Con eso puedes restaurar en cualquier servidor nuevo.
Para el volumen de PostgreSQL, uso un contenedor auxiliar que hace pg_dump cada noche y sube el resultado a mi NAS:
| |
El directorio media también conviene incluirlo en el backup porque ahí guarda los iconos que subas y algunos archivos de flujos personalizados, pero es mucho menos crítico que la base de datos.
Conclusión#
Authentik lleva siendo parte estable de mi homelab más de un año. El tiempo de configuración inicial es real, sobre todo si tienes muchos servicios que integrar, pero el resultado compensa. Entrar a diez servicios diferentes con las mismas credenciales y el mismo segundo factor es una comodidad que, una vez que la tienes, no quieres perder.
Si tienes tres o cuatro servicios con sus propios usuarios y contraseñas, este artículo es probablemente tu próximo fin de semana de homelab.