L’authentification est une fonctionnalité indispensable dans le développement applicatif et est omniprésente dans nos usages digitaux du quotidien. Au fil des années, de nombreux standards (SAML, OAuth, OIDC pour ne citer qu’eux) ont vu le jour afin de répondre aux enjeux et contraintes amenés par les nouvelles technologies.

Préambule

Depuis janvier 2019, le W3C a publié un nouveau standard (pour le Web, donc) nommé WebAuthn.

Son objectif ? Proposer une authentification web à l’aide de clés asymétriques.

Sa promesse ? Proposer une API Web pour en finir avec l’identification par mot de passe que vous connaissez, qui représente 81% des piratages de comptes.

WebAuthn fait en réalité partie d’un projet plus ambitieux : FIDO2. Il vise à standardiser les processus d’authentification sécurisés et sans mot de passe et dépasse le cadre des navigateurs et du Web.

Grâce à WebAuthn, vous allez pouvoir proposer à vos utilisateurs :

  • Une authentification multi-facteurs (2FA) basée sur une saisie de mot de passe et l’utilisation d’un device compatible FIDO2 (le scénario le plus répandu aujourd’hui) ;
  • Une nouvelle expérience d’authentification sans mot de passe (🍾). En fait, vous en bénéficiez déjà avec vos terminaux mobiles via le déverrouillage par empreinte ou reconnaissance faciale par exemple.

Je vous invite à consulter ce guide pour plus de détails et ce site pour vous amuser avec votre matériel compatible FIDO2.

Keycloak, toujours un coup d’avance

FICHE TECHNIQUE

Keycloak : 8.0.0 ou ultérieur

Authenticator FIDO2 Compatible : YubiKey 5 Series & Apple MacOs Touch Id

Navigateurs compatibles : Chrome 78

PRE-REQUIS

Keycloak 8.0.0 ou ultérieur installé

Vous n’êtes pas sans savoir que nous évangélisons Keycloak depuis plusieurs années chez Ineat, notamment pour les fonctionnalités proposées et la flexibilité de la solution.

La version 8.0.0 de Keycloak est sortie mi novembre et propose un premier support de WebAuthn avec de l’authentification sans password et du 2FA WebAuthn.

Dans ce billet, vous allez découvrir comment configurer Keycloak pour utiliser cette nouvelle fonctionnalité. L’occasion pour nous de vous présenter une fonctionnalité encore jamais évoquée dans nos articles : la création et l’utilisation de Flows d’authentification personnalisés.

Pour dérouler ce tutoriel, vous avez besoin de la version 8.0.0 de Keycloak et d’un device compatible FIDO2.

Configurer un flow 2FA WebAuthn

➡️Commencez par créer un domaine webauthn

➡️Rendez vous dans le menu Authentication

Keycloak vous propose l’ensemble des flows pré-configurés (au nombre de 8) et utilisés par défaut. Le flow qui nous intéresse est le flow Browser, adapté au web.

Pour personnaliser un flow, deux possibilités :

  1. En créer un from-scratch grace au bouton New
  2. Dupliquer et modifier un flow existant grace au bouton Copy

➡️Dupliquez le flow Browser et nommez le Webauthn browser

A ce stade vous avez un flow Browser personnalisable. Vous pouvez ré-agencer les différentes exécutions, les supprimer ou en ajouter.

Consultez ce chapitre pour comprendre comment se déroule leur enchainement.

➡️Sur la ligne Webauthn Browser Browser - Conditional OTP, cliquez sur Actions puis Add execution

➡️Choisissez WebAuthn Authenticator en bas de la liste

➡️Activez la (REQUIRED) et désactivez OTP Form (DISABLED)

Vous devriez avoir cette configuration

Pour pouvoir utiliser un Authenticator, l’utilisateur doit l’enregistrer à sa première connexion. Vous devez activer la Required Action associée au préalable :

➡️Basculez sur l’onglet Required Action, cliquez sur Register puis sélectionnez WebAuthn Register dans la liste

Activer le flow d’authentification

Votre flow d’authentification est maintenant prêt à être utilisé. Vous pouvez activer un flow d’authentification

  • Au domaine
    • Menu Authentication, onglet Bindings
    • Selection du flow dans Browser Flow
  • Au client
    • Menu Clients, puis selection du client
    • En bas de la page, Authentication Flow Overrides
    • Selection du flow dans Browser Flow
Flow configuré pour le client account

➡️Configurez le flow pour le client account

Utiliser le flow

➡️Créez un utilisateur pour les besoins de la démo en lui assignant la Required User Actions Webauthn Register

➡️Assignez un mot de passe non temporaire à cet utilisateur

➡️Connectez-vous sur http://localhost:8080/auth/realms/webauthn/account/ pour tester le 2FA :

Connection avec configuration de la UbiKey 5
Connection 2FA avec configuration du TouchId Mac
Connection avec choix de l’authenticator

Depuis la version 8.0.0 de Keycloak, l’onglet Credentials de l’utilisateur a évolué pour vous proposer la liste des certificats de connexion :

Configurer un flow password-less

Si vous souhaitez offrir une expérience sans saisie de mot de passe à l’utilisateur, l’exécution Username Password Form sera alors remplacée par l’exécution Username Form car il reste nécessaire de connaitre l’identité de l’utilisateur à authentifier.

Notez que cela permet inévitablement une attaque d’énumération d’utilisateur sur votre serveur Keycloak

Documentation de référence pour la configuration du password-less

Ma configuration simplifiée du passwordless
Authentification passwordless

Policies WebAuthn

Keycloak propose un onglet d’administration pour configurer le comportement de WebAuthn : dans le menu Authentication, onglet WebAuthn Policy :

Vous trouverez ci-dessous les liens vers la spécification de chaque attribut pour vous aider à faire un choix de configuration :

Source

Limitations actuelles

  • L’utilisateur n’a pas la main pour configurer ses authenticators ;
  • La Webauthn Policy ne s’applique pour l’instant qu’au domaine. Une policy au client pourrait être un plus.

Vivement les prochaines releases

Encore une fois, cette version 8.0.0 apporte son lot de nouveautés. La roadmap du produit nous réserve encore des surprises, notamment avec l’arrivée future de Keycloak.X.

Evidemment, nous ne manquerons pas de vous faire part de ces nouveautés dans de prochains articles.