Connexion par clé d'accès (passkey)
Sur cette page
Une clé d’accès (passkey) remplace le mot de passe par une paire de clés : la clé privée reste dans l’appareil de l’utilisateur (téléphone, Windows Hello, Touch ID, clé de sécurité, gestionnaire de mots de passe), TOSIAM ne garde que la clé publique. L’utilisateur se connecte en déverrouillant son appareil ; il n’y a rien à retenir ni à intercepter. Le protocole est WebAuthn, la partie navigateur de FIDO2.
Ce tutoriel construit un parcours de connexion qui :
- à la première connexion, demande le mot de passe puis propose de créer une clé d’accès ;
- aux connexions suivantes, propose la clé d’accès dans les suggestions du champ identifiant, ou par un bouton Se connecter avec une clé d’accès, sans mot de passe.
Étape 1 : le service WebAuthn#
TOSIAM enregistre chaque clé d’accès comme une entrée de l’annuaire LDAP, sous ou=credentials. C’est le service WebAuthn Authenticator Service du royaume qui dit où et avec quel compte.
- Dans le royaume
ref, ouvrez Services › Ajouter un service, choisissez WebAuthn Authenticator Service et cliquez sur Créer. - Ouvrez le service. Ses valeurs par défaut visent l’annuaire de la QuickStart (
localhost:50389, DN de baseou=credentials,dc=tosit,dc=org) ; il ne manque que le compte de liaison. - Renseignez le DN du compte de liaison et son mot de passe, puis Enregistrer. Avec la QuickStart, le compte
uid=tosiam,ou=system,dc=tosit,dc=orgconvient ; son mot de passe est celui de l’annuaire choisi à l’installation (TOSIAM_DB_PASSWORD).
L’annuaire de la QuickStart contient déjà le schéma fido2Credential et la branche ou=credentials. Pour un autre annuaire, chargez d’abord ce schéma : voir Enregistrement et authentification du dispositif FIDO2 (legacy).
Étape 2 : le graphe#
| Étape | Nœud | Rôle |
|---|---|---|
| Identifiant ou passkey | PageNode (PasskeyConditionalAuthenticationNode + UsernameCollectorNode) | Champ identifiant ; le navigateur y propose les clés d’accès de l’utilisateur, et un bouton ouvre directement le choix de la clé |
| Passkey utilisée ? | PasskeyConditionalDecisionNode | true si l’utilisateur s’est connecté avec une clé d’accès, false s’il a saisi son identifiant |
| Mot de passe | PasswordCollectorNode | Demande le mot de passe |
| Vérification du mot de passe | DataStoreNode | Contrôle dans l’annuaire du royaume |
| A déjà une passkey ? | PasskeyEnrollmentCheckNode | notEnrolled si l’utilisateur n’a encore aucune clé d’accès |
| Enregistrement d’une passkey | PasskeyRegistrationNode | Fait créer une clé d’accès par l’appareil et l’enregistre dans l’annuaire |
La création de la clé est proposée, pas imposée : si l’utilisateur annule (sortie error), la connexion aboutit quand même, puisque son mot de passe est vérifié.
Les deux nœuds WebAuthn ont deux réglages obligatoires :
| Réglage | Valeur du tutoriel | Rôle |
|---|---|---|
rpId | localhost | Domaine auquel la clé d’accès est rattachée. Le navigateur ne la proposera que sur ce domaine et ses sous-domaines |
origin | http://localhost:8080 | Adresse exacte (schéma, hôte, port) de la page de connexion, vérifiée à chaque opération |
Le graphe complet est disponible en JSON : connexion-passkey.json. Chaque nœud est décrit dans Nœuds : Passkeys / WebAuthn.
Étape 3 : importer et exposer le graphe#
Dans le royaume ref :
- Graphes d’authentification › Importer : choisissez
connexion-passkey.json. - Ouvrez le graphe et cliquez sur Exposer ce graphe comme parcours de connexion.
- Importez de nouveau
connexion-passkey.jsonen choisissant Remplacer.
La troisième étape rétablit le champ stage de chaque nœud, que l’éditeur remplace par l’identifiant du nœud. Pour la première page, il vaut PasskeyConditionalAuthenticationNode-UsernameCollectorNode : c’est ce qui fait afficher le bouton et les suggestions de clés d’accès. L’explication complète est dans le tutoriel Double authentification TOTP.
Le parcours est accessible à l’adresse :
http://localhost:8080/tosiam/auth/?realm=ref&module=connexion-passkeyÉtape 4 : la première connexion#
Ouvrez l’adresse du parcours.
L’utilisateur n’a pas encore de clé d’accès : il saisit son identifiant, puis son mot de passe. TOSIAM lui propose alors d’en créer une, et le navigateur ouvre sa fenêtre de création (empreinte, visage, code de l’appareil, ou choix d’un téléphone ou d’une clé de sécurité).
La clé est enregistrée et la connexion aboutit.
Étape 5 : se connecter avec la clé d’accès#
Déconnectez-vous et ouvrez de nouveau l’adresse du parcours. Deux façons de se connecter, sans mot de passe :
- cliquer dans le champ identifiant : le navigateur propose la clé d’accès parmi ses suggestions de saisie automatique ; il suffit de la choisir et de déverrouiller l’appareil ;
- cliquer sur Se connecter avec une clé d’accès : le navigateur ouvre directement le choix de la clé. C’est la voie à suivre avec une clé de sécurité USB ou NFC, que certains navigateurs ne proposent pas dans les suggestions.
TOSIAM retrouve l’utilisateur à partir de la clé choisie : il n’a même pas à saisir son identifiant.
Gérer les clés d’accès d’un utilisateur#
Les clés d’un utilisateur se listent et se suppriment par l’API REST, par exemple quand il a perdu son téléphone. Sans clé, il retombe sur le mot de passe à sa prochaine connexion, et TOSIAM lui propose d’en créer une nouvelle.
# Lister les clés d'accès de dduck
curl "http://localhost:8080/tosiam/json/ref/users/dduck/devices/webauthn?_queryFilter=true" \
-H "Accept-API-Version: resource=1.0, protocol=1.0" \
-H "iPlanetDirectoryPro: <jeton administrateur>"
# Supprimer l'une d'elles, d'après son uuid
curl -X DELETE "http://localhost:8080/tosiam/json/ref/users/dduck/devices/webauthn/<uuid>" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Accept-API-Version: resource=1.0, protocol=1.0" \
-H "iPlanetDirectoryPro: <jeton administrateur>"En production#
- HTTPS est obligatoire : en dehors de
localhost, les navigateurs refusent WebAuthn sur une page en HTTP. rpIdest le domaine de votre organisation, par exempleexample.com, etoriginl’adresse publique de la page de connexion, par exemplehttps://sso.example.com. Derrière un proxy ou un répartiteur de charge, c’est l’adresse vue par le navigateur qui compte.- Choisissez
rpIdune fois pour toutes : chaque clé d’accès est rattachée à ce domaine. Le changer rend toutes les clés existantes inutilisables, et les utilisateurs doivent en recréer une. - Donnez au compte de liaison du service WebAuthn les seuls droits nécessaires sur la branche
ou=credentials, plutôt qu’un compte administrateur de l’annuaire.
En cas de problème#
| Symptôme | Cause probable |
|---|---|
| La première page n’affiche que le champ identifiant, sans bouton ni suggestion de clé d’accès | Graphe enregistré depuis l’éditeur : réimportez le JSON (étape 3) |
| La connexion par mot de passe aboutit, mais la clé d’accès ne fonctionne pas ensuite | Service WebAuthn absent du royaume, ou compte de liaison incorrect (étape 1) : l’appareil a créé la clé mais TOSIAM n’a pas pu l’enregistrer. Supprimez-la de l’appareil, corrigez le service puis redémarrez TOSIAM : dans la version actuelle, une modification du service n’est pas toujours prise en compte à chaud |
| Le navigateur refuse de créer ou d’utiliser la clé d’accès | Page ouverte par une autre adresse que origin (par exemple 127.0.0.1 au lieu de localhost), ou page en HTTP ailleurs que sur localhost |
| La clé d’accès n’est pas proposée sur un autre site de l’organisation | Ce site n’est pas sous le domaine rpId |
Pour aller plus loin#
- Nœuds : Passkeys / WebAuthn : tous les nœuds WebAuthn, dont
PasskeyAuthenticationNodepour demander la clé d’accès comme second facteur après le mot de passe. - Double authentification TOTP et Double authentification par SMS : d’autres seconds facteurs.
- Enregistrement et authentification du dispositif FIDO2 (legacy) : la même fonction avec l’ancien mécanisme de chaînes d’authentification.
Mis à jour le