Suggérer des modifications

Introduction

FIDO2 est un standard d’authentification qui combine CTAP2 (Client to Authenticator Protocol) et WebAuthn, permettant une authentification forte sans mot de passe. Il repose sur des clés cryptographiques, garantissant une sécurité accrue contre le phishing et autres attaques.

Dans FIDO2, il y a deux cérémonies bien distinctes :

  1. Enregistrement d’un authenticator et de sa paire de clés asymétriques.

    Lorsqu’un utilisateur s’inscrit sur un site web prenant en charge FIDO2, un dispositif d’authentification (tel qu’une clé de sécurité USB, un smartphone ou un capteur biométrique intégré) génère une paire de clés asymétriques :

    • Clé privée : Elle est stockée en toute sécurité sur le dispositif d’authentification et n’est jamais partagée.
    • Clé publique : Envoyée au serveur du site web pour être associée à l’utilisateur.
  2. Authentification via l’authenticator.

    Pour s’authentifier, l’utilisateur utilise son dispositif d’authentification (par exemple, en insérant une clé USB, en touchant un capteur biométrique etc). Le serveur envoie alors un défi (challenge) que l’appareil signe avec la clé privée. La signature est ensuite vérifiée par le serveur à l’aide de la clé publique stockée, confirmant ainsi l’identité de l’utilisateur.

Dans TosiAM, ces deux séquences sont implémentées via deux modules distincts :

  • WebAuthn(Register) : Ce module permet d’enregistrer les dispositifs FIDO2.
  • WebAuthn(Authenticate) : Ce module permet d’authentifier les utilisateurs à l’aide de leurs dispositifs FIDO2.

Un WebAuthn Authenticator Service est également intégré, permettant de configurer le stockage des informations des authenticators dans l’annuaire LDAP. webauthn_fido2 Dans ce tutoriel, nous allons voir comment intégrer FIDO2 avec TOSIAM. L’objectif est de vous guider pas à pas pour mettre en place une authentification forte et sécurisée au sein de vos applications.

Prérequis:

  • Sur votre machine Windows 10/11 ou Linux, installer Tosiam QuickStart. Nous supposons le serveur TOSIAM démarré.
  • Récupérer le projet GITHUB Tosiam Samples. Nous appellerons le répertoire de travail local <TOSIAM_SAMPLES>
  • Disposer d’un JDK 11+ (La variable JAVA_HOME est définie correctement)
  • Navigateur moderne qui prend en charge de WebAuthn (Les versions récentes des navigateurs Chrome, Firefox, Edge et Safari).
  • Dispositif fido2 pour tester ( type windows hello / clé d’accès fido2 / téléphone portable qui prend en charge de webauthn).
  • TosiAM serveur est accessible en HTTPS. (Si vous utilisez TosiAM QuickStart, l’URL sera accessible à l’adresse suivante : https://localhost:8443.)
  • L’attribut GUID utilisateur (entryUUID / nsUniqueId, selon le LDAP utilisé) doit être connu et autorisé dans le datastore. (Dans cet exemple, nous utilisons un datastore embedded. L’attribut sera ajouté lors de la configuration décrite ci-dessous.)
  • Modifier le schéma du LDAP (si autre que Tosdj embedded. Assurez-vous que le schéma LDAP est correctement configuré pour supporter les fonctionnalités nécessaires à FIDO2.).
  • Les modules WebAuthn (Register) et WebAuthn (Authenticate) doivent être enregistrés dans TosiAM. Par défaut, ces deux modules sont déjà intégrés à TosiAM.

Installation

La création des modules et de la chaîne d’authentification peut être effectuée soit via la console d’administration, soit à l’aide de l’outil ssoadm.

Nous commencerons par mettre en place la solution FIDO2 et reviendrons ensuite sur les éléments essentiels pour mieux comprendre son fonctionnement.

Configuration dans TOSIAM

Option 1 - Configuration avec l’outil ssoadm

Les fichiers de propriétés et les scripts nécessaires à la configuration de FIDO2 sont situés dans le répertoire <TOSIAM_SAMPLES>/fido2, que nous appellerons <FIDO2>.

Ouvrez une fenêtre console dans le répertoire <FIDO2>, et taper

  • Windows
  • Linux

configure.bat
./configure.sh

Option 2 - Configuration via le console d’administrateur

Création d’un module d’authentification du type WebAuthn (Register) pour enregistrement de la paire de clés module_register_new Configuration du module d’enregistrement Module Register

  • RP Name : nom du domaine du RP
  • Origin : URL SSL (il n’est possible d’utiliser cette authentification que dans un contexte sécurisé). Utilisé pour valider l’origine de la requête et éviter le phishing.
  • Discoverable Credential : residentKey : Spécifie dans quelle mesure le RP souhaite créer un justificatif découvrable côté client. (True: utilisation usernameLess, False : il faudra spécifier un nom d’utilisateur en plus à l’authentification

Nous laissons les valeurs par défaut pour les autres champs. Vous pouvez consulter le bloc d’informations d’aide associé à chaque champ pour connaître leur utilité.

Création d’un module d’authentification pour l’authentification module_authenticate_new Configuration du module d’authentification Module Authenticate

  • RP Name: nom du domaine du RP
  • Origin: URL SSL (il n’est possible d’utiliser cette authentification que dans un contexte sécurisé). Utilisé pour valider l’origine de la requête
  • Discoverable Credential : residentKey : Spécifie dans quelle mesure le RP souhaite créer un justificatif découvrable côté client. (True: utilisation usernameLess, False : il faudra spécifier un nom d’utilisateur en plus à l’authentification
  • Use for MFA: utilisation du module en second facteur

Nous laissons les valeurs par défaut pour les autres champs. Vous pouvez consulter le bloc d’informations d’aide associé à chaque champ pour connaître leur utilité.

Création des Chaines

  • Chaine Fido-Register qui est composé de deux modules: Datastore qui permet l’authentification de l’utilisateur et WebAuthn(Register) qui permet l’enregistrement du dispositif Fido2. chain register
  • Chaine Fido-AuthN qui est composé de module WebAuthn(Authenticate) pour l’authentification fido2. chain authenticate
  • Chaine MFA L’authentification multifacteur (MFA) qui est composé de deux modules: Datastore qui permet l’authentification de l’utilisateur avec login et mots de passe, et de module WebAuthn(Authenticate) pour l’authentification fido2 sans mots de passe. chain authenticate

Création du Service Authenticator

Créer WebAuthn Authenticator Service. Passer la page demandant l’URL du LDAP secondaire, quickstart utilise ldap embedded. authenticator_service_new

Configurer le WebAuthn Authenticator Service

  • Vérifiez connexion LDAP/ LDAPS (URL, bind user DN / password etc). Par défaut, bind password n’est pas renseigné, donc il faut l’ajouter et enregistrer.
  • Renseignez ObjectGUID pour les entrées LDLAP correspondant à la technologie LDAP utilisée (EntryUUID pour Todsj /OpenLDAP, nsUniqueID pour ODSEE ). Authenticator Service config 1 Authenticator Service config 2

Modification du datastore

L’attribut ID de l’entrée utilisateur utilisé pour le stockage de la clé Public doit être déclaré dans le datastore (entryUUID / nsUniqueId). datastore1 datastore2

Configurer le navigateur

Utilisez une version récente du navigateur et assurez-vous que l’authentification système (OS authentication) est activée.

Par exemple : Dans Chrome, l’authentification système est activée par défaut. Dans Firefox, elle est désactivée par défaut. Pour l’activer, accédez à la page about:config et définissez signon.management.page.os-auth.enabled sur true. navigateur_config

L’URL de TosiAM est accessible en HTTPS. Cependant, le certificat pour le domaine localhost est autosigné. Par conséquent, vous devez ajouter le certificat racine associé à ce certificat autosigné dans la liste des autorités de certification racine de confiance de votre navigateur.

Avant l’ajout de certificat, l’accès a https://localhost:8443/tosiam n’est pas sécurisé. Configuration navigateur certificat

Accédez à Vos certificats dans le panneau de configuration ou via le menu Chrome (navigateur). Suivez ensuite les étapes pour importer le certificat racine.

Saisissez à la barre d’adresse de Chrome : chrome://certificate-manager/clientcerts (Sous Windows), chrome://settings/certificates(Sous Ubuntu).

Sous windows : vos certificats –> gérer les certificats importés depuis windows –> authoriete de certificat de racine de confiance –> importer –> choisir le certificat quickstartCA.crt qui est fourni dans le répertoire tosiam-quickstart-{version}/pki Configuration navigateur certificat Configuration navigateur certificat L’importation du certificat a réussi. Vous pouvez désormais constater que le certificat tosiam.io a été ajouté à la liste des certificats du navigateur. Configuration navigateur certificat

Sous ubuntu: Configuration navigateur certificat

Enregistrement de authenticator fido2

La page de connexion du premier module datastore s’affiche : Connexion datastore pour register device

Lorsque vous vous authentifiez en tant qu’utilisateur ‘demo’, une fenêtre contextuelle (pop-up) s’affiche, vous invitant à choisir le type dispositif à enregistrer. Connexion datastore pour register device

Dans le cas d’une utilisation d’un authenticator de plateforme comme Windows hello avec un PIN

register device Saisissez votre code d’accès de post windows, une parie de clés est générée. La clé Privée est stockée sur l’authenticator. La clé Public est envoyée au RP pour être publiée dans le LDAP. register device Renseignez un nom pour cet authenticator à enregistrer. Nous vous recommandons de choisir un nom plus significatif afin de faciliter la gestion de vos devices. register device L’enregistrement terminé, vous arrivez à la page de profil d’utilisateur. register device

Dans le cas d’une utilisation d’un authenticator type telephone portable

Prérequis:

  • iOS : iOS 14 ou une version ultérieure. Support intégré pour WebAuthn et FIDO2 dans Safari et les applications tierces compatibles. Les clés de sécurité physiques (via Lightning, USB-C ou NFC) ainsi que les authenticator intégrés comme Face ID et Touch ID sont pris en charge.
  • Android : Android 7.0 (Nougat) ou une version ultérieure. Support natif pour WebAuthn et FIDO2 via Google Play Services. Les navigateurs récents (comme Chrome) prennent en charge WebAuthn. Compatible avec les authenticator intégrés (empreintes digitales, code PIN) et les clés de sécurité physiques (USB, NFC, Bluetooth).

Dans cet exemple, nous utilisons un téléphone Android. Après vous être authentifié en tant qu’utilisateur ‘demo’, sélectionnez le type parmi les moyens d’enregistrement proposés, puis suivez les instructions pour enregistrer le dispositif. register_phone_1 register_phone_2 register_phone_3 Utilisez votre smartphone pour scanner le QR code. Cette étape est nécessaire uniquement lors du premier appairage du smartphone. Une fois le smartphone enregistré dans le navigateur, l’appairage ne sera plus requis, et vous recevrez directement les notifications. register_phone_4 Assurez-vous que le Bluetooth de votre smartphone est activé afin de recevoir la notification. Un message similaire s’affichera sur votre téléphone, et vous devrez le valider en utilisant votre moyen de verrouillage sécurité smartphone (Code ou empreinte digitale etc). register_phone_5 Choisir un nom pour votre dispositif enregistré. L’enregistrement terminé, vous arrivez à la page de profil d’utilisateur.

Dans le cas d’une utilisation d’un authenticator type clé de sécurité

Après être authentifié en tant qu’utilisateur ‘demo’, sélectionnez le type clé de sécurité parmi les moyens d’enregistrement proposés, puis suivez les instructions pour enregistrer le dispositif. register_key_sécurité Insérez votre clé de sécurité FIDO2, puis validez votre choix soit en saisissant un code, soit en utilisant une méthode biométrique (par exemple, empreinte digitale). register_key_sécurité Choisir un nom pour votre dispositif enregistré. L’enregistrement terminé, vous arrivez à la page de profil d’utilisateur. register_key_sécurité

Authentification du fido2

Authentification FIdo2

  • Appeler l’url: https://localhost:8443/tosiam/XUI/#login/realmwebauthn&service=authenticateDevice Authenticate device Par défaut, le paramétrage Discoverable Credential (residentKey) est false dans module Webauthn Authentication, car tous les devices ne supportent de résidencekey. En cas de false, authentication demande indiquer id user avant l’authentication :

    Saisir le nom d’utilisateur ‘demo’ à s’authentifier avec authenticator fido2.

  • Un pop-up s’affiche, vous invitant à saisir votre code Windows Hello (ou un autre type de dispositif selon votre choix). Authenticate device

  • Après la validation du dispositif FIDO2, dans ce cas Windows Hello, vous êtes authentifié en tant qu’utilisateur ‘demo’ et accédez à la page de profil utilisateur.

Authentification multifacteur (MFA)

Comme configuré dans la chaîne, il est nécessaire de s’authentifier en tant que demo avec le module datastore en premier. authenticate mfa Une fois authentifié, l’utilisateur accède au module d’authentification FIDO2. L’utilisateur saisit son identifiant, puis un pop-up s’affiche pour demander l’authentification avec un dispositif FIDO2, comme expliqué précédemment dans le chapitre Authentification FIDO2. authenticate mfa

Gestion des dispositifs fido2

Le dashboard

Depuis le dashboard du profil d’utilisateur, vous pouvez voir les authenticators enregistrés. Gestion device Cliquer sur l’authenticator pour voir l’information lié au device Gestion device Vous pouvez supprimer l’authenticator, ce qui désactivera ce dispositif FIDO2 pour le compte utilisateur. Si l’utilisateur souhaite réutiliser le dispositif, il devra l’enregistrer à nouveau. Gestion device La gestion des dispositifs des utilisateurs peut également se faire via la console d’administration. L’administrateur peut consulter les dispositifs enregistrés par les utilisateurs et les supprimer à leur place. Gestion device

API

Une API est également disponible pour la gestion des dispositifs associés à un utilisateur.

Récupérer la liste des authenticators enregistrés par l’utilisateur lui-même.

  • Url d’appel:

    https://localhost:8443/tosiam/json/{REALM}/users/{USERID}/devices/webauthn/?_queryFilter=true

  • Cookie iPlanetDirectoryPro est celui de l’utilisateur lui-même, ici demo

Exemple de requête :

curl --location 'https://localhost:8443/tosiam/json/realmwebauthn/users/demo/devices/webauthn/?_queryFilter=true' \
--header 'Accept: application/json, text/javascript, */*; q=0.01' \
--header 'Accept-API-Version: protocol=1.0,resource=1.0' \
--header 'Content-Type: application/json' \
--header 'Cookie: amlbcookie=01; iPlanetDirectoryPro=dQLC1Fl2XEzbIJcAPx5Nhk7COlA.*AAJTSQACMDEAAlNLABx3OUc1SGN4cFExRE95TTltT2U0Ym5UaUxpbFU9AAJTMQAA*' \
--header 'X-Requested-With: XMLHttpRequest'

Exemple de réponse :

{
  "result": [
      {
          "deviceAttachment": "cross-platform",
          "createdDate": 1732111373000,
          "deviceDescription": "undefined",
          "uuid": "-8vlSOwJTahCrchdOXp1YJOYNaQZr51lITM9xY74I8AxnNmp4rVA5WkQ3-VVAuKp",
          "deviceName": "yubikey",
          "deviceTransports": [
          "usb",
          "nfc"
          ]
      }
  ],
  "resultCount": 1,
  "pagedResultsCookie": null,
  "totalPagedResultsPolicy": "NONE",
  "totalPagedResults": -1,
  "remainingPagedResults": -1
}

Récupérer la list des authenticators enregistrés de l’utilisateur par administrateur

  • Url d’appel:

    https://localhost:8443/tosiam/json/{REALM}/identities/devices/{USERID}?_queryFilter=true

  • Cookie iPlanetDirectoryPro est celui de l’administrateur

Exemple de requête :

curl --location 'https://localhost:8443/tosiam/json/realmwebauthn/identities/devices/demo?_queryFilter=true' \
--header 'Accept: application/json, text/javascript, */*; q=0.01' \
--header 'Accept-API-Version: protocol=1.0,resource=1.0' \
--header 'Cookie: amlbcookie=01; iPlanetDirectoryPro=d7lqa2AkaT886eS5xpD1msUtOfo.*AAJTSQACMDEAAlNLABxSMG52TE9iMHJVaTY0ZW9xbkZldllnM3dRbjQ9AAJTMQAA*' \
--header 'X-Requested-With: XMLHttpRequest'

Exemple de réponse :

{
    "result": [
        {
            "deviceAttachment": "cross-platform",
            "createdDate": 1732111373000,
            "deviceDescription": "undefined",
            "uuid": "-8vlSOwJTahCrchdOXp1YJOYNaQZr51lITM9xY74I8AxnNmp4rVA5WkQ3-VVAuKp",
            "deviceName": "yubikey",
            "deviceTransports": [
                "usb",
                "nfc"
            ]
        }
    ],
    "resultCount": 1,
    "pagedResultsCookie": null,
    "totalPagedResultsPolicy": "NONE",
    "totalPagedResults": -1,
    "remainingPagedResults": -1
}

Supprimer un authenticator de l’utilisateur par lui-même

  • Url d’appel:

    https://localhost:8443/tosiam/json/{REALM}/users/{USERID}/devices/webauthn/{UUID_DEVICE}

  • Cookie iPlanetDirectoryPro est celui de l’utilisateur lui-même, ici demo

Exemple de requête :

curl --location --request DELETE 'https://localhost:8443/tosiam/json/realmwebauthn/users/demo/devices/webauthn/-8vlSOwJTahCrchdOXp1YJOYNaQZr51lITM9xY74I8AxnNmp4rVA5WkQ3-VVAuKp' \
--header 'Accept: application/json, text/javascript, */*; q=0.01' \
--header 'Accept-API-Version: protocol=1.0,resource=1.0' \
--header 'Content-Type: application/json' \
--header 'Cookie: amlbcookie=01; iPlanetDirectoryPro=QvVd9Bu3e8x7lfRr5iJ0wXl_wvA.*AAJTSQACMDEAAlNLABxkYmJFMW53MzNzamtYbzZpSTdvWk04ZU9xTnc9AAJTMQAA*' \
--header 'X-Requested-With: XMLHttpRequest'

Exemple de réponse :

{"success":true}

Supprimer un authenticator de l’utilisateur par administrateur

  • Url d’appel:

    https://localhost:8443/tosiam/json/{REALM}/identities/devices/{USERID}/{UUID_DEVICE}

  • Cookie iPlanetDirectoryPro est celui de l’administrateur

Exemple de requête :

curl --location --request DELETE 'https://localhost:8443/tosiam/json/realmwebauthn/identities/devices/demo/9-Kh5tYlo-iNryjW2osntw' \
--header 'Accept: application/json, text/javascript, */*; q=0.01' \
--header 'Accept-API-Version: protocol=1.0,resource=1.0' \
--header 'Content-Type: application/json' \
--header 'Cookie: amlbcookie=01; iPlanetDirectoryPro=JmwI_Fdw6pVRzvXhO0fdcCA7Csk.*AAJTSQACMDEAAlNLABxiZXlqYkRzWXpvQjc0YWZTZlM2eUpGWklKRkU9AAJTMQAA*' \
--header 'X-Requested-With: XMLHttpRequest'

Exemple de réponse :

{"success":true}

Détails techniques

  • Les authenticator WebAuthn sont des dispositifs qui génèrent et stockent les paires de clés pour l’authentification. Voici les principaux types : Clés de sécurité physiques (Hardware Tokens) : YubiKey, Google Titan Security Key, etc. authenticator intégrés (Platform Authenticators) : Touch ID, Face ID, Windows Hello.
  • La plupart des navigateurs modernes prennent en charge FIDO2/WebAuthn.
  • Le nombre de dispositifs autorisé pour l’utilisateur est paramétrable dans le module Webauthn Register.
  • Un dispositif fido2 peut être utilisé pour plusieurs comptes utilisateurs.
  • Un même utilisateur ne peut pas enregistrer plusieurs fois le même dispositif sur la même application.
  • Lorsque le Discoverable Credential (residentKey) est défini sur true dans le module Webauthn Authentication, l’utilisateur n’a pas besoin de spécifier son nom lors de l’authentification avec FIDO2. Si le dispositif est associé à plusieurs utilisateurs, une liste des utilisateurs liés à cet authenticator sera proposée.
  • details

Librairies utilisées

  • Front

    Tosiam utilise Credentials Management API. Credentials Management API permet de simplifier et de sécuriser le processus de gestion des connexions, notamment en combinant les identifiants traditionnels (nom d’utilisateur/mot de passe) et les méthodes modernes comme WebAuthn pour l’authentification biométrique ou basée sur des dispositifs.

  • Backend

    Tosiam utilise la librairie WebAuthn4J. WebAuthn4J est une bibliothèque Java open-source qui fournit des fonctionnalités pour implémenter le protocole WebAuthn et la norme FIDO2 dans des applications basées sur Java. Elle est souvent utilisée pour faciliter l’intégration d’authentification forte et sans mot de passe dans des environnements conformes aux standards de sécurité modernes.

Fido Metadata Service

Dans Tosiam, l’administrateur peut contrôler les types d’authenticator Fido2 autorisés. Ce contrôle s’appuie sur les critères du FIDO Alliance Metadata Service (MDS), un référentiel centralisé de déclarations de métadonnées utilisé par les parties de confiance pour valider l’attestation des authenticator et prouver l’authenticité des modèles de dispositifs. Le MDS fournit également des informations sur le statut de certification des authenticator et sur les problèmes de sécurité identifiés.

Dans Tosiam, la liste des métadonnées FIDO est composée de deux parties :

  • Une liste officiels fournis par la FIDO Alliance (non modifiable par Tosiam).
  • Une liste personnalisée (modifiable par Tosiam).

Vous pouvez télécharger les fichiers metadata : fido_metadata

Un fichier metadata exemple : fido_metadata

Vous pouvez créer un metadata customisé ( par exemple : les clés de sécurité entreprise ): fido_metadata fido_metadata Le metadata customisé peut être supprimé par administrateur. fido_metadata

Le module d’enregistrement dans TOSIAM peut être configuré avec l’option d’attestation directe. Cette option permet à la partie de confiance (RP) de récupérer une déclaration d’attestation d’un authenticator, si celle-ci est demandée lors de l’enregistrement. En vérifiant cette déclaration d’attestation, la RP peut exclure les authenticators qui ne répondent pas à ses exigences de sécurité, notamment ceux qui ne figurent pas dans la liste des métadonnées du service (MDS) fido_metadata

Le fichier Blob.jwt, contenant la liste des métadonnées FIDO, est mis à jour à chaque livraison de Tosiam, tous les deux mois.

Si l’utilisateur souhaite mettre à jour ce fichier manuellement, il doit :

  • Télécharger le fichier à partir de Fido AllianceMDS3 BLOB.
  • Remplacer l’ancien fichier stocké localement dans le répertoire tosiam/WEB-INF/classes. Cette action nécessite un redémarrage du serveur.