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 :
-
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.
-
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.
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
Configuration du module d’enregistrement
RP Name
: nom du domaine du RPOrigin
: 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
Configuration du module d’authentification
RP Name
: nom du domaine du RPOrigin
: URL SSL (il n’est possible d’utiliser cette authentification que dans un contexte sécurisé). Utilisé pour valider l’origine de la requêteDiscoverable 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’authentificationUse 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.
- Chaine Fido-AuthN qui est composé de module WebAuthn(Authenticate) pour l’authentification fido2.
- 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.
Création du Service Authenticator
Créer WebAuthn Authenticator Service. Passer la page demandant l’URL du LDAP secondaire, quickstart utilise ldap embedded.
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 ).
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).
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.
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é.
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
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.
Sous ubuntu:
Enregistrement de authenticator fido2
La page de connexion du premier module datastore s’affiche :
Notes: La page de connexion de TosiAM en HTTPS doit s’afficher sans afficher de messages bloquants, tels qu’une alerte de certificat dans le navigateur.
Si une alerte persiste, vérifiez que :
- L’importation du certificat racine a été correctement effectuée.
- Le certificat utilisé correspond bien à celui attendu pour le domaine.
Lorsque vous vous authentifiez en tant qu’utilisateur ‘demo’, une fenêtre contextuelle (pop-up) s’affiche, vous invitant à choisir le type dispositif à enregistrer.
Dans le cas d’une utilisation d’un authenticator de plateforme comme Windows hello avec un PIN
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.
Renseignez un nom pour cet authenticator à enregistrer. Nous vous recommandons de choisir un nom plus significatif afin de faciliter la gestion de vos devices.
L’enregistrement terminé, vous arrivez à la page de profil d’utilisateur.
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.
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.
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).
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.
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).
Choisir un nom pour votre dispositif enregistré. L’enregistrement terminé, vous arrivez à la page de profil d’utilisateur.
Authentification du fido2
Authentification FIdo2
-
Appeler l’url: https://localhost:8443/tosiam/XUI/#login/realmwebauthn&service=authenticateDevice
Par défaut, le paramétrage
Discoverable Credential
(residentKey) est false dans moduleWebauthn 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).
-
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.
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.
Gestion des dispositifs fido2
Le dashboard
Depuis le dashboard du profil d’utilisateur, vous pouvez voir les authenticators enregistrés.
Cliquer sur l’authenticator pour voir l’information lié au 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.
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.
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 moduleWebauthn 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.
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 :
Un fichier metadata exemple :
Vous pouvez créer un metadata customisé ( par exemple : les clés de sécurité entreprise ):
Le metadata customisé peut être supprimé par administrateur.
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)
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.