New: Passkey Benchmark 2026 - 8 production KPIs to compare your passkey rolloutcompare your passkey rollout
Back to Overview

Capacités du client WebAuthn

Découvrez les capacités du client WebAuthn de niveau 3 via getClientCapabilities() pour améliorer l'intégration des passkeys, optimiser l'UX et fluidifier les flux d'authentification.

Vincent Delitz
Vincent Delitz

Created: August 8, 2025

Updated: May 11, 2026

webauthn client capabilities

See the original blog version in English here.

PasskeysCheatsheet Icon

Passkeys Cheat Sheet — dev-focused WebAuthn reference. Trusted by Ally, Stanford CS & more.

Get Cheat Sheet
Key Facts
  • getClientCapabilities() dans WebAuthn Level 3 permet aux navigateurs d'exposer une liste de fonctionnalités, afin que nous puissions adapter les flux d'authentification selon ce que le client supporte.
  • Safari 17.4 a été le premier navigateur à intégrer getClientCapabilities(). Chrome 133, Edge 133 et Firefox 135 ont depuis ajouté cette prise en charge.
  • conditionalCreate automatise la création de passkeys lors de la saisie automatique des mots de passe, boostant l'adoption sans effort pour l'utilisateur. Seul Apple Passwords le supporte pour le moment (en date d'octobre 2024).
  • signalAllAcceptedCredentials synchronise la liste complète des identifiants entre la Relying Party et l'authenticator. Il est conseillé de l'appeler régulièrement (par exemple à chaque connexion) pour garder les passkeys à jour.
  • hybridTransport facilite l'authentification multi-appareils via QR code et Bluetooth, permettant de se connecter sur ordinateur avec un passkey stocké sur son smartphone.

1. Introduction#

WebAuthn est le standard moderne qui propulse les passkeys. Au lieu de s'appuyer sur des mots de passe traditionnels, il utilise la cryptographie à clé publique. Cela permet de s'authentifier avec des passkeys, qui peuvent inclure la biométrie (comme les empreintes digitales ou la reconnaissance faciale) ou des clés de sécurité physiques. Cette évolution renforce la sécurité tout en offrant une bien meilleure expérience utilisateur, puisqu'il n'y a plus de mots de passe à mémoriser.

Le standard WebAuthn Level 3 introduit de nouvelles capacités client (récupérables via l'API de navigateur getClientCapabilities()). L'objectif est d'offrir plus de contrôle et de flexibilité lors de l'intégration des passkeys. Ces nouveautés simplifient grandement l'utilisation des passkeys à travers différents appareils, navigateurs et plateformes, garantissant un parcours utilisateur fluide et cohérent.

Dans cet article, nous allons répondre aux questions suivantes :

  1. Que sont les capacités du client WebAuthn ?
  2. Quelles sont les capacités client WebAuthn existantes ?
  3. Comment ces capacités améliorent-elles l'intégration des passkeys ?
  4. Pourquoi ces capacités sont-elles importantes pour les développeurs et les chefs de produit ?

À la fin de votre lecture, vous comprendrez comment ces fonctionnalités peuvent vous aider à créer des parcours d'authentification sécurisés et sans friction, parfaitement alignés avec les attentes actuelles des utilisateurs.

2. Que sont les capacités du client WebAuthn ?#

Les capacités du client WebAuthn (Client Capabilities) sont un ensemble de fonctionnalités permettant aux navigateurs et aux plateformes de communiquer le type de fonctions WebAuthn qu'ils supportent. Pour faire simple, c'est comme une liste de contrôle des fonctionnalités qui indique aux sites web quelles méthodes et options d'authentification sont disponibles sur l'appareil d'un utilisateur. Cela nous permet d'adapter les parcours de connexion aux capacités réelles du client, assurant ainsi une expérience plus fluide et sécurisée.

Par exemple, si un navigateur signale qu'il supporte l'authentification biométrique (comme Touch ID), nous pouvons concevoir notre flux de connexion pour proposer l'empreinte digitale. À l'inverse, si certaines fonctionnalités ne sont pas supportées, nous pouvons proposer des alternatives comme un mot de passe ou un code OTP par SMS. Dans la pratique, si une capacité n'est pas supportée ou si l'action est interrompue, cela peut se traduire par une erreur générique du navigateur. Il est donc recommandé d'associer ces résultats à une classification claire des erreurs WebAuthn.

3. Les capacités introduites dans WebAuthn Level 3#

Le standard WebAuthn Level 3 apporte de nouvelles capacités qui rendent l'intégration des passkeys beaucoup plus flexible. La première prise en charge de l'API getClientCapabilities() a vu le jour avec Safari 17.4.

Pour détecter ce support dans le navigateur, voici un petit bout de code bien utile :

// Vérifier si PublicKeyCredential est supporté dans le navigateur actuel if (typeof PublicKeyCredential === "undefined") { console.log("PublicKeyCredential is not supported in this browser."); } // Vérifier si la méthode getClientCapabilities existe sur PublicKeyCredential if (typeof PublicKeyCredential.getClientCapabilities === "function") { try { let capabilities = await PublicKeyCredential.getClientCapabilities(); console.log(capabilities); } catch (error) { console.error("Error getting client capabilities:", error); } } else { console.log("getClientCapabilities is not supported in this browser"); }

4. getClientCapabilities()#

getClientCapabilities() permet aux sites web et aux applications d'interroger le client (navigateur ou appareil) pour savoir quelles fonctions WebAuthn sont prises en charge. En connaissant ces capacités, nous pouvons optimiser l'authentification pour tirer parti des meilleures options disponibles, comme l'authentification biométrique, tout en prévoyant des solutions de repli si besoin.

Substack Icon

Subscribe to our Passkeys Substack for the latest news.

Subscribe

Regardons de plus près ces capacités et leur impact sur l'intégration des passkeys :

4.1 conditionalCreate#

conditionalCreate permet la création automatique de passkeys sous certaines conditions. Une application peut l'utiliser pour générer automatiquement un passkey lors du remplissage automatique d'un mot de passe, à condition que le gestionnaire de mots de passe le supporte. Cette fonction est redoutable pour accélérer l'adoption des passkeys en assurant une transition transparente depuis les mots de passe.

4.2 conditionalGet#

Tout comme conditionalCreate, conditionalGet déclenche automatiquement la connexion par passkey. C'est parfait pour offrir la meilleure UX possible : la connexion devient non seulement sans mot de passe, mais aussi sans nom d'utilisateur (l'utilisateur clique juste sur le passkey suggéré dans une fenêtre ou un menu déroulant). En l'utilisant, on s'assure que la demande d'authentification n'apparaît qu'au bon moment, évitant de solliciter l'utilisateur inutilement.

4.3 hybridTransport#

hybridTransport garantit l'utilisation des passkeys sur différents appareils, facilitant l'authentification croisée (via QR codes et Bluetooth). Par exemple, on peut utiliser un passkey stocké sur son téléphone pour se connecter à un service sur son ordinateur. Cela permet de s'authentifier de manière sécurisée sans avoir à transférer manuellement ses passkeys ou à utiliser des méthodes classiques sur chaque nouvel appareil.

4.4 passkeyPlatformAuthenticator#

Les authenticators de plateforme, comme Windows Hello, Face ID ou Touch ID, sont intégrés directement aux appareils. Ils offrent une expérience passkey plus rapide et sécurisée en permettant de s'authentifier via la biométrie ou une méthode native (comme le code PIN de l'appareil).

4.5 userVerifyingPlatformAuthenticator#

userVerifyingPlatformAuthenticator s'assure que l'authentification par passkey implique une vérification de l'utilisateur (comme un scan d'empreinte ou la reconnaissance faciale), ajoutant ainsi une couche de sécurité indispensable.

4.6 relatedOrigins#

La capacité relatedOrigins autorise une authentification fluide entre différents domaines appartenant à une même entreprise (par exemple amazon.com et amazon.de). Si une entreprise gère plusieurs domaines ou sous-domaines, l'utilisateur peut se connecter une seule fois et accéder à tous les services sans devoir se réauthentifier à chaque fois. Cela simplifie la vie de l'utilisateur et s'avère extrêmement précieux pour les environnements internationaux ou multi-services.

4.7 signalAllAcceptedCredentials#

La méthode signalAllAcceptedCredentials(options) fournit la liste complète des identifiants (Credential IDs) WebAuthn d'un utilisateur. Les Relying Parties devraient utiliser cette méthode plutôt que signalUnknownCredential() lorsque l'utilisateur est connecté, car cela évite tout risque de fuite de données privées. Elle donne une vue d'ensemble des clés publiques de l'utilisateur, y compris les changements récents qui n'auraient pas encore été mis à jour sur les authenticators connectés.

Prenons un exemple. Un utilisateur (userId: A) possède 2 passkeys dont les Credential IDs encodés en Base64URL sont X et Y. L'utilisateur supprime ensuite le passkey X dans les paramètres de son compte sur le service web (example.com) (la clé publique est donc supprimée). Exécutons maintenant ce code :

PublicKeyCredential.signalAllAcceptedCredentials({ rpId: "example.com", userId: "A", // WebAuthn User Handle, Base64URL. allAcceptedCredentialIds: ["Y"], });

Si l'authenticator est disponible au moment de l'exécution, il supprimera ou masquera le passkey X pour les futures connexions. Toutefois, l'authenticator n'est pas toujours connecté à ce moment-là. Il est donc recommandé d'exécuter ce code régulièrement, par exemple à chaque connexion.

Les passkeys absents de allAcceptedCredentialIds seront retirés ou masqués, parfois de manière irréversible. Il est donc crucial de ne jamais retirer par erreur des Credential IDs valides de la liste. Si un Credential ID valide a été retiré accidentellement, la Relying Party doit immédiatement l'inclure dans un nouvel appel à signalAllAcceptedCredentials(options) pour le "démasquer". Si le passkey n'est pas masqué mais supprimé, il sera très difficile de corriger le tir.

Debugger Icon

Experiment with passkey flows in the Passkeys Debugger.

Try for Free

4.8 signalCurrentUserDetails#

La méthode signalCurrentUserDetails(options) signale le nom actuel de l'utilisateur et son nom d'affichage WebAuthn (Display Name). Lorsqu'elle est appelée, le client suit une série d'étapes définies pour exécuter l'action.

Un petit exemple : Un utilisateur avec un User ID WebAuthn A met à jour son nom dans les paramètres de son compte sur un site (example.com). La Relying Party peut alors lancer le code suivant :

PublicKeyCredential.signalCurrentUserDetails({ rpId: "example.com", userId: "A", // user ID, Base64URL. name: "New user name", displayName: "New display name", });

L'authenticator mettra alors à jour les métadonnées du passkey sauvegardé localement. Le grand avantage est que pour les futures requêtes de Conditional UI / remplissage automatique de passkeys, le menu de sélection affichera le nouveau nom.

4.9 signalUnknownCredential#

La méthode signalUnknownCredential(options) indique qu'un Credential ID WebAuthn n'est pas reconnu par la Relying Party, par exemple si le passkey a été supprimé par l'utilisateur. Contrairement à signalAllAcceptedCredentials(options), elle ne nécessite pas de fournir la liste complète des identifiants acceptés ni le User Handle, évitant ainsi les fuites d'informations envers des appelants non authentifiés.

Voyons cela avec un exemple. Un utilisateur supprime un passkey avec le Credential ID X sur un site (example.com). La clé publique est supprimée côté serveur, mais la clé privée reste sur l'appareil. Cela signifie que lors des futures demandes de Conditional UI avec une liste allowCredentials vide, ce passkey sera toujours proposé. La tentative de connexion échouera puisque la clé publique n'existe plus. La Relying Party devrait alors exécuter :

PublicKeyCredential.signalUnknownCredential({ rpId: "example.com", credentialId: "X", // credential ID que l'utilisateur vient d'essayer, Base64URL });

L'authenticator supprimera ou masquera alors le passkey X pour éviter qu'il ne soit proposé à nouveau.

5. Disponibilité des capacités client WebAuthn#

Le standard WebAuthn Level 3 étant encore à l'état de brouillon (draft), l'adoption de ces capacités n'est pas encore totale. Les navigateurs intègrent ces fonctions progressivement, et le support varie. Voici un aperçu de la disponibilité sur les principaux navigateurs :

NavigateurVersion supportant les capacités clientNotes
Chrome133Chrome Platform Status & Chromium Bug Tracker
Safari17.4+Premier navigateur à intégrer getClientCapabilities(). En date d'octobre 2024, Safari supporte conditionalCreate, conditionalMediation, hybridTransport, passkeyPlatformAuthenticator et userVerifyingPlatformAuthenticator.
Edge133Basé sur Chromium 133. Chromium Bug Tracker
Firefox135Mozilla a commencé à implémenter les capacités client WebAuthn Level 3 dans Firefox 135 et supérieur.

Le rythme d'adoption va s'accélérer à mesure que Level 3 gagne en maturité. Si vous souhaitez savoir combien d'utilisateurs peuvent profiter de getClientCapabilities() dès maintenant, vous pouvez consulter des données concrètes sur l'outil gratuit State of Passkeys. Gardez un œil sur les notes de mise à jour des navigateurs pour anticiper une compatibilité plus large.

StateOfPasskeys Icon

See how many people actually use passkeys.

View Adoption Data

6. Recommandations pour les développeurs#

En tant que développeur, vous vous demandez sûrement ce que cela implique pour vous et comment utiliser ces capacités dans votre application. Voici quelques conseils pratiques.

Gardez à l'esprit que tous les navigateurs ne supportent pas encore l'API getClientCapabilities() (en date de novembre 2024). En attendant, vous pouvez utiliser un polyfill disponible ici.

6.1 Appeler getClientCapabilities() très tôt#

Utilisez getClientCapabilities() dès que possible dans votre code pour détecter les fonctionnalités supportées au début du chargement de la page ou du flux d'authentification. Cela vous permettra d'adapter l'expérience dynamiquement et d'offrir les fonctionnalités passkey compatibles avec l'appareil. Par exemple, vous pourrez privilégier l'authentification native si elle est supportée, ou proposer des alternatives (comme l'OTP SMS ou les clés de sécurité matérielles) dans le cas contraire.

6.2 Booster l'adoption des passkeys avec conditionalCreate#

Si vous ajoutez des passkeys à une application qui utilise encore des mots de passe, conditionalCreate est un accélérateur incroyable pour l'adoption des passkeys. En arrière-plan, lors de la saisie automatique du mot de passe via un gestionnaire compatible (seulement Apple Passwords pour l'instant), un passkey est généré automatiquement et sera privilégié lors des prochaines connexions.

6.3 Utiliser conditionalGet le plus souvent possible#

Pour garantir non seulement une bonne adoption des passkeys, mais aussi une utilisation fréquente pour la connexion, vérifiez si l'appareil supporte la Conditional UI (via conditionalGet). Cela permet d'inciter les utilisateurs à se servir du passkey fraîchement créé, car il est suggéré de manière proactive par le système d'exploitation et demande encore moins d'effort que de remplir un mot de passe.

6.4 Utiliser hybridTransport pour le multi-appareils#

Servez-vous de hybridTransport pour activer l'authentification croisée (via QR code et Bluetooth). Vos utilisateurs pourront ainsi se connecter facilement depuis leur smartphone, même s'ils naviguent sur votre service depuis leur ordinateur de bureau.

7. Conclusion#

Les capacités du client WebAuthn (Client Capabilities) représentent une avancée majeure pour combler les lacunes actuelles des passkeys. Dans cet article, nous avons abordé les points clés :

  1. Que sont les capacités du client WebAuthn ? Nous avons vu comment ces fonctionnalités permettent aux navigateurs de signaler ce qu'ils supportent, donnant aux développeurs plus de contrôle sur les flux d'authentification.
  2. Quelles sont ces capacités ? Nous avons listé les nouveautés du standard Level 3, incluant getClientCapabilities, conditionalCreate, hybridTransport, etc.
  3. Comment améliorent-elles l'intégration des passkeys ? En fluidifiant l'intégration, en optimisant l'usage multi-appareils et en renforçant la sécurité.
  4. Pourquoi sont-elles importantes pour les développeurs ? Elles aident à créer des expériences de connexion fluides et modernes, rendant l'implémentation plus simple et redoutablement efficace.

Nous vous encourageons vivement à explorer les nouveautés de WebAuthn Level 3 et à suivre leur adoption par les navigateurs. Si vous souhaitez implémenter des passkeys et tirer parti de ces capacités avancées, n'hésitez pas à nous contacter pour un accompagnement sur mesure.

Foire aux questions#

Comment utiliser getClientCapabilities() pour améliorer le flux de connexion par passkey ?#

Appelez getClientCapabilities() tôt lors du chargement de la page ou du flux d'authentification pour détecter dynamiquement les fonctionnalités prises en charge. Cela vous permet de proposer l'authentification native lorsqu'elle est disponible, ou de basculer vers des alternatives comme les OTP SMS ou les clés de sécurité matérielles dans le cas contraire.

Quelle est la différence entre signalUnknownCredential et signalAllAcceptedCredentials ?#

signalAllAcceptedCredentials nécessite la liste complète des Credential IDs valides et le User Handle WebAuthn ; elle ne doit donc être appelée que lorsque l'utilisateur est connecté pour éviter les fuites de confidentialité. signalUnknownCredential signale un seul Credential ID non reconnu sans exiger la liste complète, ce qui permet de l'appeler en toute sécurité même si l'utilisateur n'est pas authentifié (par exemple après un échec de connexion).

Comment la capacité relatedOrigins aide-t-elle les entreprises gérant plusieurs domaines ?#

La capacité relatedOrigins permet une authentification transparente entre différents domaines détenus par la même organisation, par exemple amazon.com et amazon.de. Les utilisateurs peuvent se connecter une seule fois et accéder à toutes les plateformes sans se réauthentifier sur chaque domaine, ce qui réduit considérablement la friction dans les environnements internationaux ou multi-services.

Que faire si getClientCapabilities() n'est pas encore supporté par les navigateurs de mes utilisateurs ?#

En date de novembre 2024, tous les navigateurs ne prennent pas encore en charge getClientCapabilities(). Vous pouvez utiliser le polyfill disponible sur github.com/MasterKale/webauthn-polyfills comme solution temporaire. L'adoption devrait s'accélérer à mesure que le standard WebAuthn Level 3 gagne en maturité. Safari 17.4, Chrome 133, Edge 133 et Firefox 135 l'intègrent déjà.

Corbado

À propos de Corbado

Corbado est la Passkey Intelligence Platform pour les équipes CIAM qui gèrent l'authentification client à grande échelle. Nous vous montrons ce que les logs IDP et les outils d'analytics génériques ne voient pas : quels appareils, versions d'OS, navigateurs et gestionnaires de credentials prennent en charge les passkeys, pourquoi les enrôlements ne deviennent pas des connexions, où le flux WebAuthn échoue et quand une mise à jour OS ou navigateur casse silencieusement la connexion — le tout sans remplacer Okta, Auth0, Ping, Cognito ni votre IDP interne. Deux produits : Corbado Observe ajoute l'observabilité pour les passkeys et toute autre méthode de connexion. Corbado Connect apporte des passkeys managés avec analytics intégrés (aux côtés de votre IDP). VicRoads gère les passkeys pour plus de 5M d'utilisateurs avec Corbado (+80 % d'activation passkey). Parler à un expert Passkey

See what's really happening in your passkey rollout.

Explore the Console

Share this article


LinkedInTwitterFacebook