D4R Portal: envolver Authentik con UX propia sin duplicar formularios
d4r.es es un portal FastAPI que envuelve Authentik con una UX propia. No autentica por sí mismo: toda la identidad real vive en Authentik. El portal se limita a ofrecer una home pública, un launcher de apps autenticado y un shell de administración.
Rutas del portal
| Ruta | Acceso | Descripción |
|---|---|---|
| / | Público | Home pública |
| /login | Público | CTA a Authentik, sin formulario local |
| /apps | Autenticado | Launcher de aplicaciones |
| /status | Autenticado | Estado del stack |
| /profile | Autenticado | Perfil del usuario |
| /admin/* | platform-admin | Shell de administración |
Traefik: dos routers, un servicio
El truco clave es definir dos routers Traefik para el mismo servicio FastAPI. El router público no lleva middleware de autenticación; el privado aplica authentik@docker:
# portal-public: sin SSO
rule: Host(`d4r.es`) && (Path(`/`) || Path(`/login`) || PathPrefix(`/static/`))
# portal-private: con Authentik forward-auth
rule: Host(`d4r.es`) && (PathPrefix(`/apps`) || PathPrefix(`/status`) || PathPrefix(`/profile`) || PathPrefix(`/admin`))
middlewares: authentik@docker
FastAPI lee las cabeceras que inyecta Authentik (x-authentik-email, x-authentik-groups) para identificar al usuario y decidir qué mostrar. En local, simula esas cabeceras para desarrollo sin SSO.