Comme vous le savez, dans le cadre de notre projet "Digital Workplace" (voir ici l'excellent article d'Arawa), nous mettons en place une solution de SSO (Single Sign On), à travers le projet Keycloak.

Il existe différents modes d'authentification :

  • Authentification par login/mot de passe (par défaut, peu sécurisé)

  • Double authentification via une application telle que Authy, Google Authenticator...

  • Double authentification physique (Yubikey par exemple).

Dans le cadre du Cybermoi/s, on va évoquer ces différentes manières d'authentification.

Authentication Flow

Sous Keycloak, la notion de Authentication Flow est évoquée.

À première vue, cela peut paraître complexe, certes, mais c'est en réalité assez simple quand on a compris ! 😁

Voici une définition proposée par Keycloak pour cette notion :

An authentication flow is a container of authentications, screens, and actions, during log in, registration, and other {project_name} workflows.

Pour résumer, il s'agit d'un ensemble d'actions durant le processus de connexion ou d'inscription.

Les actions sont exécutées l'une à la suite des autres :

  • La colonne "Auth Type" est le nom de l'action qui sera exécutée.

  • La colonne "Requirement" définit si l'action est impérative, alternative, ou désactivée :

    • Required => Cette action doit être terminée avec succès avant de passer à la suite.

    • Alternative => Même si l'action n'est pas réussie, le flow peut continuer.

    • Disabled => L'action n'est pas activée.

On va ici s'interesser au flow "Browser", qui concerne les utilisateurs se connectant via un navigateur.

  • Cookie : Tentative de re-connexion, si la session de l'utilisateur est (toujours) valide. Elle est ici paramétrée comme "Alternative" car s'il n'y a pas de cookie valide, alors le flow peut continuer.

  • Kerberos : Connexion avec les identifiants Kerberos.

  • Identity Provider Redirector : Redirection vers un fournisseur d'identité (que l'on paramètre dans la section Identity Providers).

  • Forms :

    • Username Password Form : Formulaire de connexion utilisant un login et un mot de passe. Étape requise, sinon on ne pourra pas se connecter 😉.

    • Browser : Conditional OTP : Mise en place de la double authentification (Alternative si la 2FA est activée, sinon le flow se terminera avec succès).

      • User Configured : Keycloak va vérifier si un appareil de validation est configuré pour l'utilisateur. Si ce n'est pas le cas, il sera alors proposé à l'utilisateur d'en configurer un nouveau.

      • OTP Form : Permet d'entrer le code de confirmation généré.

Mise en place de l'OTP via Authy

OTP (One-Time Password) est le fait de générer un mot de passe à usage unique, qui est généré par un algorithme et doit être rentré par l'utilisateur. Dans notre exemple, nous allons paramétrer l'OTP à travers l'application Authy, qui est une alternative à Google Authenticator.

Note : Il est également possible de paramétrer l'OTP à travers un envoi de SMS, cela fera l'objet d'un article prochainement.

Authy est une application disponible aussi bien sur Android que sur iOS.

Pour paramétrer tout cela, aller dans l'onglet Required Actions :

À la première ligne, activer l'action par défaut sur "Configure OTP". Cela a pour objet de configurer l'OTP pour les nouveaux utilisateurs. Si l'OTP est déjà configuré (pour les utilisateurs existants par exemple), alors le flow de connexion continuera et l'utilisateur sera invité à entrer le code généré.

On va tester pour un utilisateur, aller sur : https://UrlDeVotreKeycloak/auth/realms/{{ Votre_Realm }}/account/

Vous êtes ainsi invité à configuré l'OTP sur votre compte. Ouvrez Authy sur votre mobile et scannez le QR Code fourni par Keycloak.

Entrez le code généré dans Keycloak, puis le tour est joué ! Vous avez configuré la double authentification via l'envoi de code (OTP) dans Keycloak ! 👏

Vous pouvez maintenant vous connecter à vos applications, en validant le processus d'authentification !

Mise en place de la double authentification via YubiKey

La procédure reste sensiblement facile, les clés YubiKey utilisent le standard WebAuthn.

On ne peut pas ajouter d'actions dans les flow dits "natifs", on va donc copier celui existant pour en faire une nouvelle version :

Pour cet essai, désactivons les actions "Conditional OTP".

Cliquer ensuite sur "Add exécution" (sur la 4ème ligne, dans Actions) pour ajouter une action. Il faudra ajouter : WebAuthn Authenticator.

La passer en Required. Voici le schéma final :

Aller à la partie "WebAuthn Policy" :

  • Signature Algorithms : RS256 et RS1

  • Timeout : 60

Puis sauvegarder.

Dernière étape, il faut enregistrer la YubiKey au compte. À la partie "Required Actions", cliquer sur Register, et lier "WebAuthn Register".

C'est opérationnel, ne pas oublier de lier le flow que nous avons créé ! Dans "Bindings", changer "Browser Flow" par le nouveau.

Pour configurer un client Keycloak avec la YubiKey (rappel de ce que c'est qu'un client ici), aller dans les paramètres, puis "Authentication Flow Overrides" :

Nous pouvons tester à présent :

Voir la vidéo ici :

Sources