🛠️ Tutos · ⏱ 9 min de lecture

Tutoriel Authentik SSO derrière Traefik en 2026 : forward auth et HTTPS pour tous vos services

Tutoriel 2026 pour déployer Authentik (SSO open source) derrière Traefik avec forward auth : protégez tous vos services self-hosted derrière une page de connexion unique, MFA et HTTPS automatique. Configs docker-compose et middlewares Traefik prêtes à l'emploi.

S Par Équipe Selfhostr · tests indépendants
Tutoriel Authentik SSO derrière Traefik en 2026 : forward auth et HTTPS pour tous vos services
ⓘ Cet article peut contenir des liens affiliés (sans surcoût pour toi, ça soutient nos tests). Voir la disclosure.
🧠
4 Go
Prérequis RAM
🔐
OIDC, SAML, LDAP
Protocoles supportés
🔀
Traefik Forward Auth
Intégration proxy

👍 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

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.fr pour Authentik et app.exemple.fr pour 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 internal isole PostgreSQL et Redis ; seul server rejoint aussi le réseau proxy pour être joignable par Traefik.
  • Les labels Traefik exposent Authentik sur auth.exemple.fr en HTTPS. Le port interne d’Authentik est 9000.
  • worker exé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 :

  1. Créez un provider. Allez dans Applications → Providers → Create, choisissez Proxy Provider. Sélectionnez le mode Forward auth (single application). Renseignez l’URL externe https://app.exemple.fr. Validez.
  2. 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.
  3. Liez le provider à l’embedded outpost. Authentik fournit un outpost embarqué qui répond aux requêtes forward auth. Dans Applications → Outposts, éditez l’outpost authentik Embedded Outpost et 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ésoudre authentik-server. Vérifiez avec docker network inspect proxy que 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 duration du provider proxy pour les services sensibles.
  • Sauvegardez la base. Tout l’état d’Authentik (utilisateurs, providers, applications) vit dans PostgreSQL. Planifiez un pg_dump régulier du volume database et 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éseau proxy partagé 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_PASS est identique dans tous les services et que le conteneur postgresql est healthy.
  • 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

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.

Tags : authentiktraefikssoforward-authhttpsself-hosting

Sur le même sujet

🛠️ Tutos

Tutoriel Gitea avec Docker en 2026 : déployer sa forge git self-hosted en HTTPS

Tutoriel 2026 pour déployer Gitea, la forge git légère self-hosted, avec Docker : base PostgreSQL, reverse proxy HTTPS, SSH sur port dédié, Actions CI/CD, durcissement et sauvegarde. Configs docker-compose et Caddy prêtes à l'emploi.

Lire
🛠️ Tutos

Déployer Immich avec Docker en 2026 : tutoriel complet (HTTPS, reverse proxy, sauvegardes)

Tutoriel 2026 pas à pas pour auto-héberger Immich, l'alternative à Google Photos, avec Docker Compose : galerie photos et vidéos, reconnaissance faciale, HTTPS automatique via Caddy et Let's Encrypt, sauvegardes et durcissement. Configs prêtes à l'emploi.

Lire
🛠️ Tutos

Déployer Jellyfin avec Docker en 2026 : tutoriel complet (transcodage matériel, HTTPS, reverse proxy)

Tutoriel 2026 pas à pas pour auto-héberger Jellyfin, le serveur média libre, avec Docker Compose : bibliothèques films et séries, transcodage matériel Intel/NVIDIA, HTTPS automatique via Caddy et Let's Encrypt, accès distant et durcissement. Configs prêtes à l'emploi.

Lire