Skip to content
G. G. testé !
🌐rĂ©seau 🔒sĂ©curitĂ© 📖guide

SWAG, mon reverse proxy 🔒 Authelia 4.39: FIDO, Passkey & Passwordless (11/XX)

Authelia 4.39 apporte le support WebAuthn natif : passkeys, connexion passwordless en un clic. Configuration complÚte avec SWAG, Docker, et intégration Nextcloud.

2 min de lecture
SWAG, mon reverse proxy 🔒 Authelia 4.39: FIDO, Passkey & Passwordless (11/XX)
Regarder la vidĂ©o — timecodes, vidĂ©os liĂ©es 35min 52s

En bref

PrérequisSWAG + Authelia 4.38 fonctionnel, SMTP configuré, Docker
RésultatConnexion passwordless en un clic via passkey (empreinte, clé FIDO, Windows Hello)
RessourcesNotes de version Authelia 4.39 · Release 4.39.1 · WebAuthn (Wikipedia)

Cet Ă©pisode est le onziĂšme de la sĂ©rie sur mon reverse proxy SWAG. Hasard du calendrier : la semaine derniĂšre je sortais un Ă©pisode sur SWAG, et la semaine suivante Authelia publie sa version 4.39 avec des fonctionnalitĂ©s que j’attendais depuis longtemps. Deux Ă©pisodes de suite sur la mĂȘme thĂ©matique — tant pis.

Authelia, un rappel rapide

Authelia est la couche d’authentification qui se place devant SWAG. C’est un projet open source gratuit — je le prĂ©cise d’autant plus dans cet Ă©pisode qui porte sur Authelia lui-mĂȘme.

Son rĂŽle : centraliser la gestion des utilisateurs et des accĂšs. On dĂ©finit quels utilisateurs ont accĂšs Ă  quels services, on configure l’authentification multifacteur, et on bĂ©nĂ©ficie du Single Sign-On (SSO) — on s’authentifie une fois, et on est reconnu par tous les services hĂ©bergĂ©s derriĂšre SWAG.

Par exemple : j’ai Nextcloud, Jellyfin, Vaultwarden. PlutĂŽt que de m’authentifier sĂ©parĂ©ment sur chaque service, Authelia centralise l’authentification. Une fois connectĂ© via Authelia, tous mes services me reconnaissent.

Les politiques d’accĂšs sont granulaires : un service peut exiger un deuxiĂšme facteur, un autre peut ĂȘtre accessible avec un seul facteur, d’autres encore peuvent ĂȘtre accessibles sans aucune authentification selon qu’on vient du rĂ©seau local ou d’internet.

La grande nouveauté : WebAuthn et les passkeys

La version 4.39 apporte le support natif de WebAuthn — standard W3C — avec les passkeys et la connexion passwordless.

WebAuthn, c’est le standard derriĂšre FIDO2, FIDO UAF (Universal Authentication Framework) et U2F (Universal Second Factor). ConcrĂštement, plutĂŽt qu’un mot de passe, l’authentification repose sur un Ă©lĂ©ment de confiance local :

  • L’empreinte digitale sur smartphone
  • Une clĂ© USB FIDO (comme la clĂ© Kensington que j’ai montrĂ©e dans la vidĂ©o, avec un capteur d’empreinte)
  • Windows Hello (reconnaissance faciale ou empreinte)
  • Un gestionnaire de mots de passe compatible (Proton Pass, Google Chrome, etc.)
  • Le TPM (Trusted Platform Module) — c’est d’ailleurs ce dont tout le monde a entendu parler avec Windows 11

C’est nettement plus sĂ©curisĂ© qu’un mot de passe classique : pas de risque de phishing par vol du mot de passe, l’authentification est liĂ©e Ă  l’appareil physique. Et c’est surtout beaucoup plus fluide en pratique.

DĂ©monstration : sur mon Nextcloud, je clique “Se connecter avec Authelia”, j’arrive sur la page d’Authelia, je clique “Sign in with a passkey”, je choisis ma clĂ©, je pose mon doigt sur le capteur d’empreinte de mon tĂ©lĂ©phone — et je suis connectĂ©. ZĂ©ro mot de passe saisi, zĂ©ro code Ă  usage unique Ă  rĂ©cupĂ©rer.

Avant de commencer : lire les notes de version

Grosse mise Ă  jour = grosse prudence. Avant de toucher quoi que ce soit, je recommande de lire le blog post officiel Authelia 4.39 — il y a une personne chez Authelia qui a pris le temps de rĂ©diger un article trĂšs complet sur tous les changements, les impacts, et la roadmap vers la version 5.

Les changements techniques Ă  connaĂźtre :

OpenID Connect (OIDC) : la maniĂšre de fournir les claims dans les ID tokens a changĂ© pour se conformer aux spĂ©cifications. Ça peut potentiellement casser certaines intĂ©grations — en particulier l’intĂ©gration Nextcloud si vous avez oidc_login_use_id_token Ă  true dans config.php (voir plus bas).

Base du conteneur : le conteneur n’est plus basĂ© sur Alpine mais sur une image custom avec des ELS checks. La construction a changĂ©, il peut y avoir de petits impacts Ă  la marge.

Intégration systemd : si vous utilisez Authelia avec systemd (pas le cas en Docker), il y a des changements à prendre en compte.

Tip : ne pas utiliser Google Translate pour lire la documentation — les termes techniques sont souvent mal traduits. Utiliser plutît un LLM qui respecte le vocabulaire technique.

Faire une sauvegarde avant tout

C’est non-nĂ©gociable pour une mise Ă  jour majeure. Dans Duplicati (mon conteneur de sauvegarde), je vĂ©rifie que l’app data de Docker a bien Ă©tĂ© sauvegardĂ© rĂ©cemment. Dans mon cas, la sauvegarde datait de 10 minutes avant la mise Ă  jour — je pouvais me lancer.

Si vous n’avez pas de solution de sauvegarde automatique en place, faites au minimum une copie manuelle du rĂ©pertoire de configuration d’Authelia (authelia/config/).

Mise Ă  jour des images

docker pull lscr.io/linuxserver/swag
docker pull authelia/authelia:latest
docker compose up -d

AprĂšs le dĂ©marrage, vĂ©rifier les logs Authelia — on doit voir Authelia 4.39 starting... avec un niveau info et aucun warning ni erreur.

Point d’attention : j’ai rencontrĂ© un problĂšme avec SWAG au moment de cette mise Ă  jour — pas liĂ© Ă  Authelia mais au docker mod CrowdSec qui avait un conflit avec la nouvelle image SWAG. Correction temporaire : dĂ©sactiver CrowdSec dans les docker mods. Le problĂšme Ă©tait discutĂ© sur le Discord LinuxServer.io, les logs indiquaient une dĂ©pendance non rĂ©solue. J’ai dĂ» attendre la correction avant de remettre CrowdSec.

J’ai aussi attendu la sortie de la version 4.39.1 avant de continuer — elle corrigeait un bug WebAuthn que j’avais rencontrĂ©. Je recommande d’attendre quelques jours aprĂšs une sortie majeure, surtout si votre configuration de production dĂ©pend de WebAuthn.

Activer WebAuthn dans la configuration

AprÚs la mise à jour, il faut comparer votre fichier de configuration actuel avec le template par défaut. La bonne méthode :

  1. Aller sur le dĂ©pĂŽt GitHub d’Authelia, rĂ©cupĂ©rer config.template.yaml
  2. Créer ce fichier dans votre répertoire authelia/config/
  3. Ouvrir les deux fichiers cĂŽte Ă  cĂŽte dans VS Code (diff)
  4. Identifier les nouvelles sections à intégrer

La section WebAuthn Ă  ajouter dans votre configuration.yml : il faut ajouter un bloc webauthn: avec disable: false, activer enable_passkey_login: true (expĂ©rimental — c’est le bouton “Sign in with passkey” sur la page de connexion), dĂ©finir un display_name, et configurer les sous-sections filtering, selection_criteria et metadata selon les recommandations de sĂ©curitĂ© documentĂ©es dans le config.template.yaml sur GitHub d’Authelia.

Le paramĂštre enable_passkey_login: true est expĂ©rimental mais c’est celui qui active le bouton de connexion directe par passkey sur la page d’Authelia. C’est exactement ce qu’on cherche.

Attention : dans les versions suivantes (4.40, 4.41, vers la 5.0), ce paramÚtre expérimental changera probablement. Il faudra surveiller les notes de version.

Il y a aussi un paramĂštre enable_passkey_for_two_factors qui permet de bypasser le deuxiĂšme facteur quand on utilise une passkey. Normalement, mĂȘme si WebAuthn est trĂšs sĂ©curisĂ©, Authelia peut encore demander un second facteur selon vos politiques. Ce paramĂštre permet de dire “une passkey compte comme authentification complĂšte, pas besoin d’un OTP en plus”. C’est expĂ©rimental, mais trĂšs pratique en pratique.

AprĂšs modification, redĂ©marrer le conteneur Authelia. Sur la page de connexion, le bouton “Sign in with a passkey” doit apparaĂźtre.

Correction nécessaire pour Nextcloud

Si vous avez Nextcloud intégré avec Authelia via OIDC, il y a un changement obligatoire dans config/www/nextcloud/config/config.php :

'oidc_login_use_id_token' => false,   // était true avant, doit passer à false

Si vous laissez cette valeur Ă  true, vous aurez une erreur aprĂšs l’authentification OIDC — Nextcloud n’arrivera pas Ă  rĂ©soudre l’utilisateur correctement. Le reste de la configuration OIDC Nextcloud n’a pas besoin de changer.

Enregistrer une passkey

L’enregistrement ne peut pas se faire Ă  la volĂ©e lors de la premiĂšre connexion. Il faut le faire manuellement, une fois, depuis les paramĂštres du compte Authelia.

Procédure :

  1. Se connecter normalement à un service (identifiant + mot de passe + OTP si nécessaire)
  2. Aller directement sur l’URL de votre instance Authelia
  3. Authelia affiche “Vous ĂȘtes actuellement connectĂ©â€ avec votre nom d’utilisateur
  4. Cliquer sur l’icîne de paramùtres en haut à droite → Settings
  5. Dans la section “Security” → “Authentification à deux facteurs”
  6. Cliquer “Ajouter”
  7. Une popup s’ouvre avec un code OTP Ă  usage unique — reçu par email Ă  l’adresse associĂ©e au compte
  8. Saisir ce code, donner un libellĂ© Ă  la clĂ© (ex: “Proton Pass PC”, “Chrome Android”)
  9. Le gestionnaire de mots de passe / navigateur vous demande de crĂ©er la clĂ© — confirmer

PrĂ©requis indispensable : SMTP doit ĂȘtre configurĂ© dans Authelia pour que l’envoi du code OTP par email fonctionne. Sans SMTP, l’enregistrement est impossible.

J’ai enregistrĂ© deux clĂ©s :

  • “PC” — gĂ©rĂ©e par Proton Pass sur mon ordinateur portable
  • “S23 Plus” — gĂ©rĂ©e par Google Chrome sur mon tĂ©lĂ©phone (Proton Pass Android ne gĂšre pas encore bien WebAuthn dans ce contexte)

Le libellĂ© est trompeur : ce n’est pas l’appareil qui compte, c’est le gestionnaire de mots de passe ou le navigateur qui stocke la clĂ©. Proton Pass sur PC, Chrome sur Android — voilĂ  ce que j’aurais dĂ» Ă©crire.

Test du fonctionnement complet

Pour tester proprement, il faut d’abord supprimer tous les cookies d’authentification (ou passer en navigation privĂ©e). Dans Chrome : cliquer sur l’icĂŽne de paramĂštres cookies → “GĂ©rer les donnĂ©es des sites” → supprimer les cookies des trois domaines concernĂ©s (Authelia + les services).

Ensuite :

  • Aller sur Nextcloud → “Se connecter avec Authelia”
  • Page Authelia : cliquer “Sign in with a passkey”
  • Le gestionnaire de mots de passe / navigateur propose les clĂ©s disponibles
  • Je choisis ma clĂ© Proton Pass → empreinte → connectĂ© directement sur Nextcloud

Zéro mot de passe tapé. Zéro code OTP récupéré. Un clic + une empreinte.

C’est prĂ©cisĂ©ment ça que j’attendais depuis un moment. C’est Ă  la fois plus sĂ©curisĂ© (pas de mot de passe Ă  voler) et plus fluide (moins d’étapes). L’expĂ©rience au quotidien est nettement amĂ©liorĂ©e.

Ce qui reste Ă  explorer

Je n’ai pas encore testĂ© Windows Hello avec cette configuration. Ça devrait fonctionner de la mĂȘme maniĂšre — Windows Hello implĂ©mente WebAuthn, il devrait pouvoir stocker et utiliser les clĂ©s. Ce sera peut-ĂȘtre l’objet d’une future vidĂ©o.

Un mot sur la qualité du projet Authelia

J’auto-hĂ©berge Authelia depuis un moment, et ce projet tient vraiment la route. Il y a une roadmap claire et prĂ©cise, les mises Ă  jour respectent les standards (OIDC, WebAuthn, les normes de sĂ©curitĂ©), les changements sont toujours bien documentĂ©s avec des articles de blog. La mise Ă  jour 4.38 l’annĂ©e derniĂšre Ă©tait complexe Ă  migrer — la 4.39, on met Ă  jour l’image et ça repart tel quel.

La 5.0 va probablement amener d’autres changements importants. Il faudra suivre l’actualitĂ©, mais avec ce projet, j’ai confiance que ça sera bien documentĂ©.

Si vous auto-hĂ©bergez des services exposĂ©s sur internet, vous ne pouvez pas faire l’économie d’une couche d’authentification centralisĂ©e. Authelia + SWAG + CrowdSec, c’est l’ensemble que j’utilise et que je recommande. Une fois configurĂ©, ajouter un nouveau service derriĂšre ce reverse proxy prend littĂ©ralement 10 secondes — copier un fichier de config, l’adapter, le sauvegarder, et le service est disponible en ligne avec toute la sĂ©curitĂ© dĂ©jĂ  en place.

Signaler une erreur

Pour les questions techniques

Passe par les commentaires YouTube ou le Discord — ta question profite à tout le monde.

Ce formulaire est uniquement pour signaler une erreur dans le contenu.

Retour aux articles
Partager :

Suivre la chaĂźne

Une vidĂ©o chaque jeudi Ă  17h30 — abonnez-vous pour ne rien rater.