12 KiB
Authentik - Sistema de Autenticación SSO
Authentik es un sistema de autenticación y autorización de código abierto que proporciona Single Sign-On (SSO) para tus aplicaciones.
📋 Descripción
Este stack despliega Authentik configurado para funcionar con Traefik mediante Forward Authentication, protegiendo tus servicios con autenticación centralizada.
🚀 Despliegue
Desde Portainer
- Ve a Stacks → Add stack
- Nombre:
authentik - Selecciona Repository o Git repository
- Configura:
- Repository URL:
<tu-repositorio> - Repository reference:
main - Compose path:
authentik/docker-compose.yml
- Repository URL:
- Carga el archivo de variables de entorno:
authentik/stack.env - O añade manualmente las variables de entorno necesarias
- Haz clic en Deploy the stack
Variables de Entorno Importantes
Edita el archivo stack.env con tus valores:
# Secretos (genera valores aleatorios seguros)
AUTHENTIK_SECRET_KEY=tu-clave-secreta-aleatoria
AUTHENTIK_POSTGRESQL_PASSWORD=tu-password-db-aleatorio
# Dominio de Authentik
AUTHENTIK_DOMAIN=auth.tudominio.com
# Email y SMTP (opcional pero recomendado)
AUTHENTIK_EMAIL__HOST=smtp.tudominio.com
AUTHENTIK_EMAIL__PORT=587
AUTHENTIK_EMAIL__USERNAME=noreply@tudominio.com
AUTHENTIK_EMAIL__PASSWORD=tu-password-email
AUTHENTIK_EMAIL__FROM=noreply@tudominio.com
⚙️ Configuración Post-Instalación
Una vez desplegado Authentik, accede a su interfaz web en https://auth.tudominio.com y completa la configuración inicial.
1. Acceso Inicial
- Usuario por defecto:
akadmin - Contraseña: La que configures en el primer acceso
- Cambia la contraseña inmediatamente
2. Crear Applications (Aplicaciones)
Para cada servicio que quieras proteger (ej: Portainer, Traefik Dashboard, Gitea, etc.):
- Ve a Applications → Create
- Completa el formulario:
- Name:
Portainer(nombre descriptivo) - Slug:
portainer(identificador único en minúsculas) - Provider: (lo crearás en el siguiente paso - déjalo vacío por ahora)
- Policy engine mode:
any(permite acceso si alguna política coincide) - UI settings: Configura el icono y apariencia (opcional)
- Name:
- Haz clic en Create
3. Crear Providers de tipo Forward Auth
Los providers conectan tus aplicaciones con Authentik. Para Forward Auth con Traefik:
- Ve a Applications → Tu aplicación → Provider → Create
- Selecciona tipo: Proxy Provider
- Completa el formulario:
- Name:
Portainer Provider - Authorization flow: Selecciona
default-provider-authorization-implicit-consent(créalo si no existe - ver paso 4) - Type: Forward auth (single application)
- External host:
https://portainer.tudominio.com(URL completa de tu servicio) - Internal host:
http://portainer:9000(opcional - URL interna si Authentik debe hacer reverse proxy) - Internal host SSL validation: Desactivado (si usas HTTP interno)
- Name:
- Advanced settings:
- Token validity:
hours=24(duración de la sesión) - Cookie domain:
.tudominio.com(permite SSO entre subdominios)
- Token validity:
- Haz clic en Create
- Vuelve a la aplicación y selecciona el provider que acabas de crear
4. Crear Authorization Flow (Implicit)
El authorization flow de tipo implicit permite autorización sin pantalla de consentimiento explícita:
Opción A: Usar el flow por defecto
Authentik suele incluir un flow llamado default-provider-authorization-implicit-consent. Si existe, úsalo directamente en tus providers.
Opción B: Crear un flow personalizado
Si necesitas crear uno nuevo:
- Ve a Flows & Stages → Flows → Create
- Completa el formulario:
- Name:
Authorization Flow Implicit - Title:
Redirecting to application - Slug:
default-provider-authorization-implicit-consent - Designation: Authorization
- Authentication:
Require authentication(el usuario debe estar autenticado) - Behavior settings:
- Layout:
content_lefto el que prefieras
- Layout:
- Name:
- Haz clic en Create
Añadir Stages al Flow
- Abre el flow que acabas de crear
- Ve a la pestaña Stage Bindings
- Añade el stage de consentimiento (opcional):
- Haz clic en Bind existing stage
- Selecciona
default-provider-authorization-consent(o crea uno nuevo) - Order: 10
- Evaluate on plan: Activado
- Re-evaluate policies: Activado
Nota: Para implicit consent, puedes crear un flow sin stages de consentimiento, lo que permite autorización automática.
Crear Stage de Consent (si no existe)
Si necesitas crear el stage de consentimiento:
- Ve a Flows & Stages → Stages → Create
- Tipo: Consent Stage
- Completa:
- Name:
default-provider-authorization-consent - Mode:
always_requireohidden(para implicit) - Consent expire in:
weeks=4(duración del consentimiento)
- Name:
- Haz clic en Create
5. Configurar Outpost
Los outposts son los componentes que ejecutan los providers y procesan las peticiones de autenticación:
- Ve a Outposts → Outposts → Create
- Completa el formulario:
- Name:
authentik-embedded-outpost(o el nombre que prefieras) - Type: Proxy
- Integration: Déjalo vacío (el outpost embedded usa la integración por defecto)
- Name:
- Applications: Selecciona todas las aplicaciones que creaste (Portainer, Traefik, etc.)
- Configuration:
authentik_host: https://auth.tudominio.com authentik_host_insecure: false log_level: info object_naming_template: ak-outpost-%(name)s docker_network: proxy docker_labels: traefik.enable: "true" - Haz clic en Create
Verificar Estado del Outpost
- Ve a Outposts → Outposts
- Verifica que tu outpost aparece en estado Healthy (saludable)
- Si aparece como Unhealthy:
- Verifica los logs:
docker logs authentik-worker - Asegúrate de que el contenedor puede comunicarse con el servidor de Authentik
- Verifica la red Docker
proxy
- Verifica los logs:
6. Configurar Middleware en Traefik
Para que Traefik use Authentik como forward auth, necesitas configurar el middleware.
Opción A: Middleware en el stack de Authentik
Añade las siguientes labels al servicio authentik-server en el docker-compose.yml:
labels:
# Middleware de Forward Auth
traefik.http.middlewares.authentik.forwardauth.address: "http://authentik-server:9000/outpost.goauthentik.io/auth/traefik"
traefik.http.middlewares.authentik.forwardauth.trustForwardHeader: "true"
traefik.http.middlewares.authentik.forwardauth.authResponseHeaders: "X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid"
Opción B: Middleware en archivo de configuración de Traefik
En el archivo de configuración dinámica de Traefik (dynamic.yml):
http:
middlewares:
authentik:
forwardAuth:
address: "http://authentik-server:9000/outpost.goauthentik.io/auth/traefik"
trustForwardHeader: true
authResponseHeaders:
- "X-authentik-username"
- "X-authentik-groups"
- "X-authentik-email"
- "X-authentik-name"
- "X-authentik-uid"
7. Proteger Servicios con Authentik
Una vez configurado el middleware, añade la label a los servicios que quieras proteger:
labels:
traefik.http.routers.portainer.middlewares: "ths-authentik@docker"
O si definiste el middleware en archivo:
labels:
traefik.http.routers.portainer.middlewares: "authentik@file"
🔐 Gestión de Usuarios y Grupos
Crear Usuarios
- Ve a Directory → Users → Create
- Completa los datos del usuario
- Asigna grupos si es necesario
- Haz clic en Create
Crear Grupos
- Ve a Directory → Groups → Create
- Nombre del grupo (ej:
admins,users) - Añade usuarios al grupo
- Haz clic en Create
Crear Políticas de Acceso
Para controlar quién puede acceder a cada aplicación:
- Ve a Applications → Tu aplicación → Policy / Group / User Bindings
- Haz clic en Bind existing policy/group/user
- Selecciona un grupo (ej:
admins) - Order: 0 (menor número = mayor prioridad)
- Haz clic en Create
🔧 Configuración Avanzada
Configurar Múltiples Dominios (SSO entre subdominios)
En la configuración del provider:
- Cookie domain:
.tudominio.com(con el punto inicial) - Esto permite que la sesión se comparta entre todos los subdominios
Configurar Email (SMTP)
Para notificaciones y recuperación de contraseñas:
- Ve a System → Settings → Email
- Configura los parámetros SMTP (o usa las variables de entorno en
stack.env)
Configurar Autenticación de Dos Factores (2FA)
- Ve a Flows & Stages → Stages
- Crea stages de tipo Authenticator Validation Stage (TOTP, WebAuthn, etc.)
- Añade estos stages a tu authentication flow
Integración con Proveedores Externos (OAuth, SAML)
- Ve a System → Providers → Create
- Selecciona el tipo (OAuth2, SAML, etc.)
- Configura según el proveedor externo (Google, GitHub, etc.)
🛠️ Troubleshooting
El outpost aparece como Unhealthy
# Ver logs del worker
docker logs authentik-worker
# Ver logs del servidor
docker logs authentik-server
# Verificar conectividad de red
docker exec authentik-server ping authentik-postgresql
docker exec authentik-server ping authentik-redis
Los servicios no están protegidos
- Verifica que el middleware de Traefik esté correctamente configurado
- Comprueba que las labels en el servicio están correctas
- Verifica los logs de Traefik:
docker logs traefik - Asegúrate de que el provider está asociado a la aplicación
- Verifica que el outpost esté en estado Healthy
Error "Invalid redirect_uri"
- Verifica que el External host en el provider coincide exactamente con la URL del servicio
- Asegúrate de incluir el protocolo (
https://) - No incluyas barras finales
Sesiones no persisten / Se desconecta constantemente
- Verifica que el Cookie domain esté configurado correctamente (
.tudominio.com) - Comprueba que Redis esté funcionando:
docker logs authentik-redis - Aumenta el Token validity en el provider
No puedo acceder al panel de Authentik
- Accede directamente por IP:
http://IP-servidor:9000 - Verifica los logs:
docker logs authentik-server - Comprueba que el dominio DNS está configurado correctamente
- Verifica que Traefik está redirigiendo correctamente
📚 Recursos Adicionales
- Documentación oficial de Authentik
- Authentik con Traefik
- Configuración de Flows
- Configuración de Outposts
🔒 Seguridad
- Cambia inmediatamente el password por defecto de
akadmin - Genera valores aleatorios para
AUTHENTIK_SECRET_KEYyAUTHENTIK_POSTGRESQL_PASSWORD - Habilita 2FA para usuarios administradores
- Realiza backups regulares de la base de datos PostgreSQL
- Mantén Authentik actualizado a la última versión
💾 Backups
Para hacer backup de la configuración de Authentik:
# Backup de la base de datos PostgreSQL
docker exec authentik-postgresql pg_dump -U authentik authentik > authentik_backup.sql
# Backup de Redis (sesiones)
docker exec authentik-redis redis-cli --rdb /data/dump.rdb
🔄 Actualizaciones
- En Portainer, ve a tu stack de Authentik
- Haz clic en Editor
- Actualiza las versiones de las imágenes si es necesario
- Haz clic en Update the stack
- O ejecuta:
docker compose pull && docker compose up -d