Cybersécurité

Authentik MFA et Passkeys : configuration complète 2026

14 دقائق للقراءة

📍 Article principal de la série : Authentik 2026 : guide pratique.

Sans 2FA obligatoire, votre Authentik est aussi sûr qu’un seul mot de passe. Ce tutoriel détaille la configuration complète des trois mécanismes MFA : TOTP (Aegis, Authy), WebAuthn (YubiKey, Solokey), et Passkeys (Apple, Google, Windows Hello). Politique organisationnelle, recovery codes, déploiement à une équipe de 30 personnes en 30 minutes.

Prérequis

  • Authentik en production avec premier admin créé (voir tutoriel installation).
  • Compréhension des protocoles MFA (TOTP, WebAuthn).
  • Niveau attendu : intermédiaire/avancé.
  • Temps estimé : 1-2 heures.

Étape 1 — Comprendre les trois mécanismes

TOTP (Time-based One-Time Password) : code 6 chiffres généré toutes les 30 secondes par une app (Aegis, Authy, Google Authenticator). Universel, fonctionne hors ligne, mais peut être phishé via fake login pages.

WebAuthn / FIDO2 : clés cryptographiques sur appareil (YubiKey, Solokey, Titan). Résistant au phishing par conception. Nécessite l’achat de clés matérielles (~50 USD/clé).

Passkeys : évolution moderne de WebAuthn, stockée dans iCloud Keychain, Google Password Manager, ou Microsoft Authenticator. Synchronisée entre appareils du même écosystème.

Étape 2 — Activer TOTP dans Authentik

Authentik admin → Stages → Create → Authenticator TOTP Setup Stage :

Name: setup-totp
Friendly Name: Configuration TOTP
Digits: 6
Configure flow: default-authentication-flow

Puis Stages → Create → Authenticator Validation Stage :

Name: validate-totp
Device classes: TOTP
Configuration stage: setup-totp

Étape 3 — Activer WebAuthn / Passkeys

Stages → Create → Authenticator WebAuthn Setup Stage
Name: setup-webauthn
User verification: preferred (allows Passkeys)
Authenticator attachment: cross-platform OR platform
Resident key requirement: preferred

« cross-platform » accepte YubiKey USB. « platform » accepte Apple/Google/Windows Hello (Passkey). « preferred » des deux accepte tout.

Étape 4 — Modifier le Flow d’authentification

Flows → default-authentication-flow → Stage Bindings → Add :

  1. Stage 1 : Identification (email).
  2. Stage 2 : Password.
  3. Stage 3 : Authenticator Validation (existing user).
  4. Stage 4 : Login.

Order important : Identification → Password → MFA → Login.

Étape 5 — Politique : MFA obligatoire

Policies → Create → Expression Policy :

Name: require-mfa
Expression:
return ak_user_has_authenticator(request.user, ['totp', 'webauthn'])

Lier à Flow Authentication. Tout utilisateur sans MFA configuré sera forcé de le faire avant de poursuivre le login.

Étape 6 — Onboarding utilisateur

Quand un nouvel employé est créé, Authentik envoie un email d’invitation. Au premier login :

  1. Saisit email + mot de passe initial (force le changement).
  2. Configure MFA : choix entre TOTP et WebAuthn/Passkey.
  3. Reçoit recovery codes (6 codes uniques) à imprimer/stocker.
  4. Confirme MFA via challenge.
  5. Atterrit sur le dashboard.

Étape 7 — Recovery codes

Stages → Create → Authenticator Static Setup Stage :

Name: setup-static
Token count: 6
Token length: 12

L’utilisateur reçoit 6 codes à usage unique pour secours en cas de perte d’appareil. Imprimer ou Vaultwarden.

Étape 8 — Politique YubiKey pour admins

Pour le groupe admins, exiger spécifiquement WebAuthn (YubiKey ou Passkey) :

Policies → Expression Policy
Name: admins-require-webauthn
Expression:
if "admins" in [g.name for g in request.user.ak_groups.all()]:
    return ak_user_has_authenticator(request.user, ['webauthn'])
return True

Étape 9 — Déploiement à 30 personnes

Procédure recommandée :

  1. Annoncer 7 jours à l’avance.
  2. Tester sur 3 personnes pilote (admin + 2 devs) pendant 1 semaine.
  3. Webinar 30 minutes pour expliquer.
  4. Activer politique MFA obligatoire un mardi (pas vendredi).
  5. Hotline pendant 48 heures pour les blocages.

Erreurs fréquentes

Erreur Cause Solution
QR code TOTP rejette code Heure serveur décalée NTP : chrony ou systemd-timesyncd
WebAuthn ne marche pas Safari Safari < 17 Update Safari ou utiliser Chrome
Passkey impossible à enregistrer HTTPS pas valide Vérifier certificat Let’s Encrypt
Utilisateur perdu MFA Pas de recovery codes Admin : Reset MFA via panel + email new flow
YubiKey USB non détectée Permission browser Authoriser USB dans browser settings
Loop validation Stage MFA mal lié Vérifier Flow Stage Bindings

Réalités locales : ce qui change à Dakar et Abidjan

Trois précisions. Coût YubiKey : YubiKey 5C NFC à 50 USD via revendeur officiel ou 35 EUR via Amazon Allemagne (livraison Maroc/Tunisie possible). Pour économiser, Solokey (40 EUR) ou TrustKey (30 USD) sont équivalents en sécurité. Téléphones partagés : éviter installation TOTP sur téléphone partagé famille. Privilégier Aegis (open source) avec mot de passe app + sauvegarde chiffrée. Passkeys et iCloud : utilisateurs Apple synchronisent automatiquement entre Mac/iPhone/iPad. Utilisateurs Android : Google Password Manager.

Tutoriels frères

FAQ

SMS comme MFA ? Non. SMS vulnérable au SIM-swapping, pas conforme NIST 800-63 niveau AAL2. Authentik supporte SMS mais nous le déconseillons fortement.

Coût pour 30 collaborateurs en YubiKey ? 30 × 35 € = 1050 €. Ne déployer que pour admins (5 × 35 = 175 €). Reste de l’équipe : TOTP gratuit.

Passkeys vs YubiKey ? Passkeys plus pratiques (sync entre appareils du même écosystème). YubiKey plus universelles (cross-platform, pas vendor lock-in).

Que faire si admin perd YubiKey + recovery codes ? Procédure « break-glass » : second admin dédié dont les credentials sont en coffre physique. Sans cela, full reinstall de l’instance.

MFA fatigue (push spam) ? Authentik n’utilise pas push notifications par défaut, donc pas de risque de fatigue. TOTP/WebAuthn nécessitent action utilisateur explicite.

À lire ensuite

Tester ce setup sur votre propre serveur

Le moyen le plus rapide de tester ce tutoriel en conditions réelles : prendre un petit VPS Hostinger.

Voir Hostinger →

Lien d affiliation. Si vous achetez via ce lien, le blog reçoit une petite commission sans surcoût pour vous.

Etape 1 : Pourquoi un IdP self-hosted a Dakar plutot qu Okta

Okta facture environ 6 USD par utilisateur et par mois sur le plan Workforce, soit 47 800 FCFA mensuels pour 12 collaborateurs (1 EUR = 655,957 FCFA, 1 USD ≈ 605 FCFA en mai 2026). Une PME de Plateau, Almadies ou Bamako prefere souvent un VPS Hetzner CX22 a 4,51 EUR par mois (≈ 2 960 FCFA) qui heberge Authentik pour 50 a 200 comptes sans surcout. Authentik est un fournisseur d identite open source ecrit en Python, sous licence MIT, qui parle SAML 2.0, OIDC, LDAP et propose un moteur de flow visuel pour orchestrer enrolement, MFA et SSO.

Concretement, vous gagnez le controle des journaux d audit (utile pour la conformite locale), vous reduisez la facture devises USD/EUR qui plombe les TPE quand le franc CFA fluctue, et vous offrez le SSO a tout votre catalogue SaaS — Notion, GitHub, Grafana, Nextcloud — depuis une seule fenetre de connexion brandee aux couleurs de votre societe.

Etape 2 : Provisionner le VPS et installer Docker Engine

Commandez un VPS chez Hetzner (Falkenstein FSN1, latence ≈ 95 ms vers Dakar via cable ACE) ou OVH Gravelines. Installez Ubuntu 24.04 LTS. Connectez-vous en SSH puis preparez Docker.

sudo apt update && sudo apt -y upgrade
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
docker --version

Vous devez voir Docker version 27.x ou superieur. Si la commande renvoie command not found, deconnectez la session SSH et reconnectez-vous : le groupe docker n est pris en compte qu apres rouverture de shell.

Etape 3 : Deployer Authentik 2025.10 avec docker compose

Authentik publie une stack docker compose officielle. Creez un dossier dedie et telechargez le fichier de reference depuis goauthentik.io.

mkdir -p /opt/authentik && cd /opt/authentik
wget https://goauthentik.io/docker-compose.yml
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '
')" > .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '
')" >> .env
echo "AUTHENTIK_ERROR_REPORTING__ENABLED=false" >> .env
docker compose up -d

La premiere initialisation telecharge environ 1,8 Go d images et migre la base PostgreSQL. Patientez 90 a 120 secondes puis ouvrez https://votre-vps:9443/if/flow/initial-setup/ pour creer le compte akadmin. Si la page tarde, verifiez les logs avec docker compose logs -f server : le worker doit afficher Bootstrapping admin user.

Etape 4 : Forcer TOTP comme premier facteur

Dans la console Authentik, allez dans Flows & Stages, ouvrez le flow default-authentication-flow, ajoutez un Authenticator Validation Stage configure sur Code Authenticator (TOTP). Liez ensuite un Authenticator TOTP Setup Stage au flow default-authenticator-setup. Cela impose l enrolement d une app comme Aegis (Android, open source), Raivo (iOS) ou Bitwarden Authenticator a la prochaine connexion. TOTP est conforme RFC 6238 et fonctionne hors ligne, indispensable quand la fibre Sonatel grille en saison des pluies.

Pour eviter de bloquer un utilisateur sans smartphone, conservez un Static Tokens Stage qui genere 10 codes de secours imprimables. Communiquez la procedure de reset par WhatsApp Business avec verification d identite — jamais par e-mail seul.

Etape 5 : Activer WebAuthn et passkeys multidispositifs

Dans Stages, creez un Authenticator WebAuthn Stage. Reglez User Verification sur preferred et Resident Key sur required pour activer les passkeys synchronisees iCloud Keychain, Google Password Manager et 1Password. Liez ce stage au flow default-authenticator-setup avec une priorite plus elevee que TOTP afin que les comptes recents enrolent directement une passkey.

Sur Chrome 131+ ou Safari 18, l utilisateur clique sur Enregistrer un passkey, approuve avec Touch ID ou empreinte Android, et le navigateur stocke la cle privee dans le Secure Enclave. Le facteur est resistant au phishing : aucun code ne transite jamais. Pour les profils admins, exigez en plus un YubiKey 5C NFC (≈ 35 000 FCFA chez les revendeurs Plateau) en activant resident key required avec attestation direct.

Etape 6 : Connecter votre premiere application SaaS via OIDC

Pour brancher Nextcloud heberge sur le meme VPS, creez dans Authentik un Provider OAuth2/OpenID, copiez Client ID et Client Secret, autorisez la redirect URI https://nuage.votredomaine.sn/apps/oidc_login/oidc. Cote Nextcloud, installez l application OIDC Login, collez les identifiants et l URL de decouverte https://auth.votredomaine.sn/application/o/nextcloud/.well-known/openid-configuration.

Testez en navigation privee : la connexion redirige vers Authentik, demande TOTP ou passkey, puis revient logue dans Nextcloud. Repetez l operation pour Grafana, GitHub Enterprise et Outline. Resultat : un seul mot de passe maitre, MFA partout, journal d acces centralise.

Etape 7 : Forcer HTTPS public derriere Caddy

Authentik ecoute en HTTPS auto-signe sur 9443. Pour exposer https://auth.votredomaine.sn proprement, placez Caddy 2.8 en reverse proxy. Caddy negocie un certificat Let s Encrypt automatiquement.

auth.votredomaine.sn {
  reverse_proxy localhost:9000
}

Rechargez Caddy avec sudo systemctl reload caddy. Vous devez voir certificate obtained dans journalctl -u caddy. Pointez votre enregistrement A vers l IP du VPS chez votre registrar (Gandi, OVH ou Namecheap) — propagation DNS sous 15 a 30 minutes.

Etape 8 : Sauvegarder PostgreSQL et tester la restauration

Une instance Authentik vide ne sert a rien si vous perdez la base. Programmez un dump quotidien chiffre vers un bucket Backblaze B2 (0,005 USD/Go/mois, gratuit jusqu a 10 Go).

docker compose exec -T postgresql pg_dump -U authentik authentik | gzip | gpg --batch --yes -c --passphrase-file /root/.bkp_pass > /backups/authentik-$(date +%F).sql.gz.gpg

Planifiez via cron a 03h00 GMT et repliquez sur B2 avec rclone. Une fois par mois, restaurez le dump sur un VPS de test et reconnectez-vous : c est le seul moyen de prouver que votre sauvegarde fonctionne reellement le jour ou Hetzner perd un disque.

Etape 9 : À lire ensuite

Etudiez le flow d enrolement social (Google, Apple) si vous gerez une communaute B2C, branchez Authentik sur LDAP pour piloter Samba en agence, et consultez notre guide debutant cybersecurite Senegal ainsi que le tutoriel configurer un VPS Hetzner depuis Dakar pour completer la stack.

Etape 1 : Pourquoi un IdP self-hosted a Dakar plutot qu Okta

Okta facture environ 6 USD par utilisateur et par mois sur le plan Workforce, soit 47 800 FCFA mensuels pour 12 collaborateurs (1 EUR = 655,957 FCFA, 1 USD ≈ 605 FCFA en mai 2026). Une PME de Plateau, Almadies ou Bamako prefere souvent un VPS Hetzner CX22 a 4,51 EUR par mois (≈ 2 960 FCFA) qui heberge Authentik pour 50 a 200 comptes sans surcout. Authentik est un fournisseur d identite open source ecrit en Python, sous licence MIT, qui parle SAML 2.0, OIDC, LDAP et propose un moteur de flow visuel pour orchestrer enrolement, MFA et SSO.

Concretement, vous gagnez le controle des journaux d audit (utile pour la conformite locale), vous reduisez la facture devises USD/EUR qui plombe les TPE quand le franc CFA fluctue, et vous offrez le SSO a tout votre catalogue SaaS — Notion, GitHub, Grafana, Nextcloud — depuis une seule fenetre de connexion brandee aux couleurs de votre societe.

Etape 2 : Provisionner le VPS et installer Docker Engine

Commandez un VPS chez Hetzner (Falkenstein FSN1, latence ≈ 95 ms vers Dakar via cable ACE) ou OVH Gravelines. Installez Ubuntu 24.04 LTS. Connectez-vous en SSH puis preparez Docker.

sudo apt update && sudo apt -y upgrade
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
docker --version

Vous devez voir Docker version 27.x ou superieur. Si la commande renvoie command not found, deconnectez la session SSH et reconnectez-vous : le groupe docker n est pris en compte qu apres rouverture de shell.

Etape 3 : Deployer Authentik 2025.10 avec docker compose

Authentik publie une stack docker compose officielle. Creez un dossier dedie et telechargez le fichier de reference depuis goauthentik.io.

mkdir -p /opt/authentik && cd /opt/authentik
wget https://goauthentik.io/docker-compose.yml
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" > .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env
echo "AUTHENTIK_ERROR_REPORTING__ENABLED=false" >> .env
docker compose up -d

La premiere initialisation telecharge environ 1,8 Go d images et migre la base PostgreSQL. Patientez 90 a 120 secondes puis ouvrez https://votre-vps:9443/if/flow/initial-setup/ pour creer le compte akadmin. Si la page tarde, verifiez les logs avec docker compose logs -f server : le worker doit afficher Bootstrapping admin user.

Etape 4 : Forcer TOTP comme premier facteur

Dans la console Authentik, allez dans Flows & Stages, ouvrez le flow default-authentication-flow, ajoutez un Authenticator Validation Stage configure sur Code Authenticator (TOTP). Liez ensuite un Authenticator TOTP Setup Stage au flow default-authenticator-setup. Cela impose l enrolement d une app comme Aegis (Android, open source), Raivo (iOS) ou Bitwarden Authenticator a la prochaine connexion. TOTP est conforme RFC 6238 et fonctionne hors ligne, indispensable quand la fibre Sonatel grille en saison des pluies.

Pour eviter de bloquer un utilisateur sans smartphone, conservez un Static Tokens Stage qui genere 10 codes de secours imprimables. Communiquez la procedure de reset par WhatsApp Business avec verification d identite — jamais par e-mail seul.

Etape 5 : Activer WebAuthn et passkeys multidispositifs

Dans Stages, creez un Authenticator WebAuthn Stage. Reglez User Verification sur preferred et Resident Key sur required pour activer les passkeys synchronisees iCloud Keychain, Google Password Manager et 1Password. Liez ce stage au flow default-authenticator-setup avec une priorite plus elevee que TOTP afin que les comptes recents enrolent directement une passkey.

Sur Chrome 131+ ou Safari 18, l utilisateur clique sur Enregistrer un passkey, approuve avec Touch ID ou empreinte Android, et le navigateur stocke la cle privee dans le Secure Enclave. Le facteur est resistant au phishing : aucun code ne transite jamais. Pour les profils admins, exigez en plus un YubiKey 5C NFC (≈ 35 000 FCFA chez les revendeurs Plateau) en activant resident key required avec attestation direct.

Etape 6 : Connecter votre premiere application SaaS via OIDC

Pour brancher Nextcloud heberge sur le meme VPS, creez dans Authentik un Provider OAuth2/OpenID, copiez Client ID et Client Secret, autorisez la redirect URI https://nuage.votredomaine.sn/apps/oidc_login/oidc. Cote Nextcloud, installez l application OIDC Login, collez les identifiants et l URL de decouverte https://auth.votredomaine.sn/application/o/nextcloud/.well-known/openid-configuration.

Testez en navigation privee : la connexion redirige vers Authentik, demande TOTP ou passkey, puis revient logue dans Nextcloud. Repetez l operation pour Grafana, GitHub Enterprise et Outline. Resultat : un seul mot de passe maitre, MFA partout, journal d acces centralise.

Etape 7 : Forcer HTTPS public derriere Caddy

Authentik ecoute en HTTPS auto-signe sur 9443. Pour exposer https://auth.votredomaine.sn proprement, placez Caddy 2.8 en reverse proxy. Caddy negocie un certificat Let s Encrypt automatiquement.

auth.votredomaine.sn {
  reverse_proxy localhost:9000
}

Rechargez Caddy avec sudo systemctl reload caddy. Vous devez voir certificate obtained dans journalctl -u caddy. Pointez votre enregistrement A vers l IP du VPS chez votre registrar (Gandi, OVH ou Namecheap) — propagation DNS sous 15 a 30 minutes.

Etape 8 : Sauvegarder PostgreSQL et tester la restauration

Une instance Authentik vide ne sert a rien si vous perdez la base. Programmez un dump quotidien chiffre vers un bucket Backblaze B2 (0,005 USD/Go/mois, gratuit jusqu a 10 Go).

docker compose exec -T postgresql pg_dump -U authentik authentik | gzip | gpg --batch --yes -c --passphrase-file /root/.bkp_pass > /backups/authentik-$(date +%F).sql.gz.gpg

Planifiez via cron a 03h00 GMT et repliquez sur B2 avec rclone. Une fois par mois, restaurez le dump sur un VPS de test et reconnectez-vous : c est le seul moyen de prouver que votre sauvegarde fonctionne reellement le jour ou Hetzner perd un disque.

Etape 9 : Dans la continuité

Etudiez le flow d enrolement social (Google, Apple) si vous gerez une communaute B2C, branchez Authentik sur LDAP pour piloter Samba en agence, et consultez notre guide debutant cybersecurite Senegal ainsi que le tutoriel configurer un VPS Hetzner depuis Dakar pour completer la stack.

مشاركة