El single sign-on suena como un lujo empresarial hasta que gestionas un homelab con quince servicios y una contraseña diferente para cada uno. En ese momento deja de ser algo agradable y se convierte en un problema de seguridad real. Una credencial comprometida puede dar a un atacante acceso a todo; una revocación olvidada deja a un antiguo miembro del equipo con acceso mucho después de lo que debería.
La solución que uso combina Samba 4 Active Directory en Linux como almacén central de identidades, y Authentik como proveedor OIDC/OAuth2 que conecta el directorio AD con cada aplicación que necesita autenticación.
Samba 4 en Linux ofrece un controlador de dominio Active Directory completamente funcional — realm Kerberos, directorio LDAP, DNS y Group Policy — sin licencia de Windows Server. Cualquier servicio que sepa hablar LDAP (que es la mayoría) puede consultarlo directamente. Cualquier aplicación moderna que soporte OIDC puede pasar por Authentik, que a su vez consulta el mismo directorio Samba mediante su outpost LDAP.
El resultado: una cuenta de usuario, una contraseña, un único lugar para desactivar el acceso.
flowchart TD
classDef user fill:#f9f9f9,stroke:#333,stroke-width:2px;
classDef auth fill:#fff3e0,stroke:#ef6c00,stroke-width:2px;
classDef app fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
classDef dir fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
User([Navegador])
subgraph Identity [Capa de Identidad]
Samba["Samba 4 AD\nKerberos · LDAP · DNS"]
Authentik["Authentik\nOIDC · OAuth2 · SAML · Forward Auth"]
end
subgraph Apps [Aplicaciones]
Forgejo["Forgejo"]
Grafana["Grafana"]
Proxmox["Proxmox VE"]
Other["Cualquier app\nvía Forward Auth"]
end
NGINX["NGINX\nProxy Forward Auth"]
User -->|login| Authentik
Authentik -->|LDAP bind| Samba
Authentik -->|token OIDC| Forgejo
Authentik -->|token OIDC| Grafana
Authentik -->|token OIDC| Proxmox
User --> NGINX
NGINX -->|auth_request| Authentik
NGINX -->|autenticado| Other
class User user;
class Samba,Authentik auth;
class Forgejo,Grafana,Proxmox,Other app;
class NGINX dir;
Samba 4 corre como contenedor LXC en Proxmox. El aprovisionamiento se realiza con un único comando samba-tool domain provision:
samba-tool domain provision \
--domain=HOME \
--realm=HOME.INTERNAL \
--server-role=dc \
--dns-backend=SAMBA_INTERNAL \
--adminpass='TuContraseñaSegura'
Tras el aprovisionamiento, el contenedor proporciona un KDC Kerberos, un servidor LDAP en el puerto 389 y DNS para la zona home.internal. El host Proxmox y todos los nodos LXC/VM apuntan su DNS a este contenedor.
Pasos clave posteriores al aprovisionamiento:
Authentik corre como contenedor separado. Tras la configuración inicial, configura una fuente LDAP apuntando al contenedor Samba:
ldap://samba.home.internalCN=authentik-svc,OU=CuentasServicio,DC=home,DC=internalDC=home,DC=internal(objectClass=person)Authentik sincroniza usuarios y grupos desde AD de forma programada. Cuando un usuario inicia sesión a través de Authentik, la contraseña se valida contra Kerberos mediante el bind LDAP — Authentik nunca almacena la contraseña.
Para aplicaciones con soporte OIDC nativo, crea un Proveedor OAuth2/OIDC en Authentik y una Aplicación correspondiente:
FORGEJO__server__OAUTH2_JWT_SECRET y añade una fuente OAuth2 apuntando al endpoint de descubrimiento de AuthentikGF_AUTH_GENERIC_OAUTH_*Cada aplicación obtiene su propio client ID y secret. El acceso está controlado por políticas de Authentik — puedes exigir MFA para Proxmox mientras permites solo contraseña para Grafana.
Para aplicaciones sin soporte OIDC, NGINX Forward Auth es la solución. Cada petición pasa por NGINX, que llama al endpoint /outpost.goauthentik.io/auth/nginx de Authentik antes de reenviar al upstream:
location / {
auth_request /outpost.goauthentik.io/auth/nginx;
auth_request_set $authentik_username $upstream_http_x_authentik_username;
error_page 401 = @authentik_redirect;
proxy_pass http://upstream;
}
El outpost de Authentik gestiona el flujo de login y establece cabeceras de identidad. La aplicación upstream recibe X-Authentik-Username y X-Authentik-Groups sin necesitar saber nada sobre OIDC.
Cuando alguien se va, deshabilita su cuenta de AD. Esa única acción:
Sin tener que buscar por los paneles de administración de cada aplicación. Un cambio, revocación completa.
Samba 4 · Authentik · NGINX Forward Auth · Proxmox LXC · Kerberos · LDAP