👍 On aime
- ✓Authentification unique (SSO) centralisée pour tous vos services
- ✓Gestion native de l'authentification à deux facteurs (MFA)
- ✓Support des standards modernes OIDC, SAML et LDAP
- ✓Déploiement simplifié via Docker Compose et PostgreSQL
👎 On regrette
- ✕Architecture exigeante nécessitant PostgreSQL et Redis en plus
- ✕Configuration initiale complexe pour le reverse proxy
- ✕Installation de Traefik non couverte par ce tutoriel
📑 Sommaire ▾
- 01 Prérequis
- 02 Étape 1 : Préparer le réseau et les secrets
- 03 Étape 2 : Le docker-compose.yml d’Authentik
- 04 Étape 3 : Configuration initiale d’Authentik
- 05 Étape 4 : Créer le provider et l’application forward auth
- 06 Étape 5 : Déclarer le middleware forward auth dans Traefik
- 07 Étape 6 : Protéger un service de démo
- 08 Étape 7 : Durcissement et bonnes pratiques
- 09 Dépannage
- 10 Vérification finale
- 11 FAQ
- · Quelle différence entre Authentik et Authelia ?
- · Le forward auth fonctionne-t-il avec n’importe quel service ?
- · Puis-je utiliser Authentik avec Caddy ou Nginx au lieu de Traefik ?
- · Combien de ressources consomme Authentik ?
- · Authentik est-il sûr pour un usage en production ?
- · Comment ajouter un nouveau service au SSO ?
- 18 Sur le même sujet
Vous hébergez une dizaine de services sur votre serveur : un tableau de bord, un Portainer, un outil de monitoring, un panneau d’administration. Certains n’ont aucune authentification, d’autres une gestion d’utilisateurs basique. Plutôt que de bricoler un basic_auth différent pour chacun, la bonne pratique en 2026 consiste à placer un fournisseur d’identité (IdP) devant tout, avec une page de connexion unique, du MFA et la gestion centralisée des comptes. C’est le rôle d’Authentik.
Authentik est un IdP open source moderne qui parle SAML, OAuth2/OIDC, LDAP et, surtout, expose un point d’entrée forward auth que Traefik peut interroger avant de laisser passer une requête. Dans ce tutoriel, on déploie Authentik derrière Traefik, on configure le forward auth, et on protège un service de démo derrière une page de connexion SSO unique avec authentification à deux facteurs.
Prérequis
- Un VPS sécurisé sous Ubuntu 24.04 LTS, avec au moins 2 vCPU et 4 Go de RAM (Authentik tire PostgreSQL, Redis, un serveur et un worker). Un Hetzner CPX21 ou équivalent convient bien. Si le serveur n’est pas prêt, voyez d’abord installer et sécuriser un VPS Ubuntu.
- Docker et Docker Compose installés.
- Traefik v3 déjà déployé comme reverse proxy, avec un résolveur de certificats Let’s Encrypt configuré. On rappellera les points clés mais l’installation complète de Traefik dépasse ce tutoriel.
- Un nom de domaine dont vous contrôlez le DNS. On utilisera
auth.exemple.frpour Authentik etapp.exemple.frpour le service protégé. - Les ports 80 et 443 ouverts sur UFW.
Étape 1 : Préparer le réseau et les secrets
Créez un réseau Docker partagé entre Traefik, Authentik et vos services (si ce n’est pas déjà fait) :
docker network create proxy
Créez le dossier de travail et générez les secrets requis par Authentik :
mkdir -p ~/authentik && cd ~/authentik
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env
Le fichier .env contient désormais le mot de passe PostgreSQL et la clé secrète d’Authentik. Protégez-le :
chmod 600 .env
Étape 2 : Le docker-compose.yml d’Authentik
Créez le fichier de composition :
nano docker-compose.yml
services:
postgresql:
image: docker.io/library/postgres:16-alpine
container_name: authentik-postgres
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
interval: 30s
timeout: 5s
retries: 5
volumes:
- database:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${PG_PASS}
POSTGRES_USER: authentik
POSTGRES_DB: authentik
networks:
- internal
redis:
image: docker.io/library/redis:alpine
container_name: authentik-redis
restart: unless-stopped
command: --save 60 1 --loglevel warning
volumes:
- redis:/data
networks:
- internal
server:
image: ghcr.io/goauthentik/server:2026.2
container_name: authentik-server
restart: unless-stopped
command: server
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: authentik
AUTHENTIK_POSTGRESQL__NAME: authentik
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
volumes:
- media:/media
- templates:/templates
networks:
- internal
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.authentik.rule=Host(`auth.exemple.fr`)"
- "traefik.http.routers.authentik.entrypoints=websecure"
- "traefik.http.routers.authentik.tls.certresolver=letsencrypt"
- "traefik.http.services.authentik.loadbalancer.server.port=9000"
depends_on:
- postgresql
- redis
worker:
image: ghcr.io/goauthentik/server:2026.2
container_name: authentik-worker
restart: unless-stopped
command: worker
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: authentik
AUTHENTIK_POSTGRESQL__NAME: authentik
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
volumes:
- media:/media
- templates:/templates
- /var/run/docker.sock:/var/run/docker.sock
networks:
- internal
depends_on:
- postgresql
- redis
volumes:
database:
redis:
media:
templates:
networks:
internal:
proxy:
external: true
Points clés :
- Le réseau
internalisole PostgreSQL et Redis ; seulserverrejoint aussi le réseauproxypour être joignable par Traefik. - Les labels Traefik exposent Authentik sur
auth.exemple.fren HTTPS. Le port interne d’Authentik est 9000. workerexécute les tâches de fond (envoi d’e-mails, expiration de sessions) ; il n’a pas besoin d’être exposé.
Lancez la pile :
docker compose up -d
Étape 3 : Configuration initiale d’Authentik
Au premier démarrage, Authentik génère le compte administrateur via un assistant. Rendez-vous sur :
https://auth.exemple.fr/if/flow/initial-setup/
Définissez l’adresse e-mail et le mot de passe de l’administrateur (akadmin). Vous arrivez ensuite sur le tableau de bord d’administration. Avant tout, activez le MFA sur votre compte : Settings → MFA Devices → Enroll, et enregistrez une application TOTP (Aegis, Authenticator…). Un IdP sans MFA n’a guère d’intérêt.
Étape 4 : Créer le provider et l’application forward auth
Le forward auth fonctionne ainsi : Traefik intercepte chaque requête vers un service protégé, interroge Authentik via un middleware, et ne laisse passer que si l’utilisateur est authentifié.
Dans l’interface Authentik :
- Créez un provider. Allez dans
Applications → Providers → Create, choisissez Proxy Provider. Sélectionnez le mode Forward auth (single application). Renseignez l’URL externehttps://app.exemple.fr. Validez. - Créez l’application. Dans
Applications → Applications → Create, donnez un nom (« Démo »), un slug (demo), et associez le provider créé à l’étape précédente. - Liez le provider à l’embedded outpost. Authentik fournit un outpost embarqué qui répond aux requêtes forward auth. Dans
Applications → Outposts, éditez l’outpostauthentik Embedded Outpostet ajoutez votre application « Démo » à la liste.
Étape 5 : Déclarer le middleware forward auth dans Traefik
Ajoutez le middleware Authentik à la configuration dynamique de Traefik. Si vous utilisez un fichier dynamique, créez-y :
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
L’adresse pointe vers l’outpost embarqué d’Authentik sur le réseau proxy. Les authResponseHeaders transmettent l’identité de l’utilisateur authentifié au service en aval (pratique pour les services qui savent lire ces en-têtes).
Piège fréquent : Traefik et Authentik doivent partager le réseau
proxy, sinon Traefik ne peut pas résoudreauthentik-server. Vérifiez avecdocker network inspect proxyque les deux conteneurs y figurent.
Étape 6 : Protéger un service de démo
Déployez un service quelconque et appliquez-lui le middleware authentik. Dans un autre dossier :
services:
demo:
image: nginxdemos/hello
container_name: demo
restart: unless-stopped
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.demo.rule=Host(`app.exemple.fr`)"
- "traefik.http.routers.demo.entrypoints=websecure"
- "traefik.http.routers.demo.tls.certresolver=letsencrypt"
- "traefik.http.routers.demo.middlewares=authentik@file"
- "traefik.http.services.demo.loadbalancer.server.port=80"
networks:
proxy:
external: true
La ligne décisive est traefik.http.routers.demo.middlewares=authentik@file : elle force chaque requête vers app.exemple.fr à passer par le forward auth. Le suffixe @file indique que le middleware vient de la config dynamique fichier (utilisez @docker s’il est défini par labels).
Lancez :
docker compose up -d
Visitez https://app.exemple.fr. Vous êtes redirigé vers la page de connexion Authentik. Après authentification (mot de passe + TOTP), vous accédez au service de démo. Le SSO est en place : un seul login protège désormais tous les services portant ce middleware.
Étape 7 : Durcissement et bonnes pratiques
- Imposez le MFA globalement. Dans
Flows & Stages, modifiez le flow d’authentification par défaut pour rendre l’étape TOTP obligatoire, pas seulement optionnelle. - Segmentez par groupes. Créez des groupes Authentik (admins, famille, invités) et restreignez l’accès de chaque application via des policies basées sur l’appartenance à un groupe.
- Limitez la durée des sessions. Réduisez le
Session durationdu provider proxy pour les services sensibles. - Sauvegardez la base. Tout l’état d’Authentik (utilisateurs, providers, applications) vit dans PostgreSQL. Planifiez un
pg_dumprégulier du volumedatabaseet exportez-le hors site. Notre tutoriel sauvegarde automatique chiffrée avec restic et Backblaze s’applique directement aux dumps. - Surveillez les tentatives. Authentik journalise chaque tentative de connexion dans
Events. Branchez ces logs sur votre supervision pour détecter le brute force.
Dépannage
- Boucle de redirection vers la page de login. L’application n’est pas attachée à l’outpost embarqué (étape 4.3), ou l’URL externe du provider ne correspond pas exactement au domaine du service.
- Erreur 502 sur le service protégé. Traefik ne joint pas
authentik-server. Vérifiez le réseauproxypartagé et que le conteneur Authentik tourne (docker logs authentik-server). - « Forbidden » après authentification. Une policy de groupe bloque l’utilisateur. Vérifiez les bindings de l’application dans
Applications → votre app → Policy / Group / User Bindings. - Authentik refuse de démarrer. Souvent une erreur de connexion PostgreSQL : contrôlez que
PG_PASSest identique dans tous les services et que le conteneurpostgresqlesthealthy. - TOTP refusé en boucle. L’horloge du VPS dérive. Synchronisez avec
sudo timedatectl set-ntp true.
Vérification finale
# Tous les conteneurs Authentik tournent
docker compose ps
# Authentik répond en HTTPS
curl -sI https://auth.exemple.fr/-/health/live/ | head -1
# Le service protégé redirige vers le login (302 vers auth.exemple.fr)
curl -sI https://app.exemple.fr | head -3
FAQ
Quelle différence entre Authentik et Authelia ?
Authentik est un IdP complet avec interface graphique, support SAML/OIDC/LDAP et gestion fine des utilisateurs et des flows. Authelia est plus léger, configuré par fichiers YAML, et excelle pour le simple forward auth. Authentik convient si vous voulez aussi faire de l’OIDC vers des applications tierces ; Authelia si vous cherchez la simplicité maximale. Voyez notre comparatif Authentik vs Authelia vs Keycloak.
Le forward auth fonctionne-t-il avec n’importe quel service ?
Oui, c’est tout l’intérêt : le forward auth s’applique au niveau du proxy, en amont du service. Même une application sans aucune gestion d’utilisateurs se retrouve protégée par la page de login Authentik. Pour une intégration plus poussée (SSO réel avec déconnexion synchronisée), privilégiez OIDC si le service le supporte nativement.
Puis-je utiliser Authentik avec Caddy ou Nginx au lieu de Traefik ?
Oui. Authentik expose les mêmes endpoints forward auth, exploitables par le forward_auth de Caddy ou l’auth_request de Nginx. La configuration des middlewares diffère mais le principe est identique. Pour choisir votre proxy, consultez Traefik vs Nginx Proxy Manager vs Caddy.
Combien de ressources consomme Authentik ?
La pile complète (PostgreSQL, Redis, server, worker) tourne confortablement avec 1,5 à 2 Go de RAM au repos. Le worker peut grimper lors de tâches lourdes (synchronisation LDAP, envoi massif d’e-mails). Pour un usage familial ou petite équipe, 4 Go de RAM offrent une marge confortable.
Authentik est-il sûr pour un usage en production ?
Oui, c’est un projet mature et activement maintenu, utilisé en production par de nombreuses organisations. Comme tout point d’entrée d’authentification, il devient critique : sauvegardez la base, imposez le MFA, maintenez l’image à jour et restreignez l’accès au worker (qui monte le socket Docker).
Comment ajouter un nouveau service au SSO ?
Trois étapes : créez (ou réutilisez) un provider proxy en forward auth avec la bonne URL externe, créez une application qui le référence, et attachez cette application à l’embedded outpost. Côté Traefik, il suffit d’ajouter le label middlewares=authentik@file au routeur du nouveau service.
Sur le même sujet
- Authentik vs Authelia vs Keycloak : quel SSO self-hosted en 2026
- Traefik vs Nginx Proxy Manager vs Caddy
- Reverse proxy HTTPS automatique avec Caddy et Docker
- Sauvegarde automatique chiffrée avec restic et Backblaze
- Installer et sécuriser un VPS Ubuntu de A à Z
Avec Authentik en forward auth derrière Traefik, vous transformez une collection de services hétéroclites en un environnement à connexion unique, protégé par MFA et géré depuis une seule interface. C’est l’une des améliorations de sécurité les plus rentables qu’on puisse apporter à un homelab. Pour suivre les nouvelles failles d’authentification et les outils self-hosted, abonnez-vous à notre bot de veille Telegram.