Détection des fonctionnalités WebAuthn simplifiée avec getClientCapabilities()

Publié le 15 janvier 2025

WebAuthn offre des fonctionnalités uniques telles que l'interaction avec Bluetooth pour le protocole hybride, la communication avec les fournisseurs de clés d'accès et la suggestion de clés d'accès dans la saisie automatique. Toutefois, différents clients et authentificateurs offrent différents niveaux de compatibilité avec les fonctionnalités WebAuthn. Cette disparité peut entraîner une expérience utilisateur fragmentée, où certains utilisateurs peuvent rencontrer des erreurs ou ne pas pouvoir utiliser certaines options d'authentification. En permettant aux développeurs de déterminer les capacités des clients, ils peuvent créer des flux d'authentification plus robustes qui s'adaptent à ces variations.

La méthode PublicKeyCredential.getClientCapabilities() permet aux parties de confiance de déterminer les fonctionnalités WebAuthn compatibles avec le navigateur. La méthode renvoie une promesse qui se résout en une liste de fonctionnalités compatibles, ce qui permet aux développeurs d'adapter les expériences et les workflows d'authentification en fonction des fonctionnalités spécifiques du client.

Compatibilité

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

getClientCapabilities()

getClientCapabilities() est une API WebAuthn qui permet aux parties de confiance de déterminer les fonctionnalités disponibles. Pour utiliser l'API, vous devez appeler PublicKeyCredential.getClientCapabilities(). La promesse renvoyée est résolue en un objet qui contient des capacités, chacune indiquant sa disponibilité avec true ou false. Si la fonctionnalité est undefined, considérez que sa disponibilité est inconnue.

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

Le navigateur peut créer un identifiant sans interface utilisateur modale visible si l'utilisateur a déjà accepté d'en créer un.

conditionalGet

Le navigateur peut authentifier l'utilisateur en affichant les clés d'accès dans la boîte de dialogue de saisie automatique, au lieu d'une UI modale visible. L'équivalent existant est PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

L'appareil peut utiliser le Bluetooth pour que le navigateur puisse créer un identifiant et s'authentifier avec celui-ci sur plusieurs appareils à l'aide du protocole hybride. Cela signifie généralement que le navigateur peut afficher un code QR que l'utilisateur peut scanner pour se connecter avec un téléphone contenant un identifiant.

passkeyPlatformAuthenticator

Le navigateur peut créer un identifiant et s'authentifier avec celui-ci via un authentificateur de plate-forme de validation de l'utilisateur ou un autre appareil compatible via le protocole hybride. Équivaut à hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

Le navigateur peut créer un identifiant et s'authentifier avec celui-ci, qui ne correspond pas à l'ID de RP, à condition qu'il soit spécifié dans le fichier des origines associées.

signalAllAcceptedCredentials

Le navigateur peut signaler les identifiants disponibles sur le serveur au fournisseur de clés d'accès, afin que ce dernier puisse maintenir la cohérence de la liste des clés d'accès avec le serveur.

signalCurrentUserDetails

Le navigateur peut signaler des informations utilisateur telles que le nom d'utilisateur et le nom à afficher sur le serveur au fournisseur de clés d'accès, afin que le fournisseur de clés d'accès puisse maintenir la cohérence de ses informations de clés d'accès avec le serveur.

signalUnknownCredential

Le navigateur peut signaler un identifiant supprimé sur le serveur au fournisseur de clés d'accès, afin que ce dernier puisse maintenir la cohérence de la liste des clés d'accès avec le serveur.

userVerifyingPlatformAuthenticator

Le navigateur peut créer un identifiant et s'authentifier auprès d'un authentificateur de plate-forme. Cela ne signifie pas que le navigateur est compatible avec le protocole hybride. L'équivalent existant est PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

extensions

Les RP peuvent également déterminer les extensions disponibles avec getClientCapabilities().

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

L'identifiant est précédé de extension:, suivi d'un nom d'extension. Pour connaître les noms des extensions, consultez les identifiants d'extension WebAuthn définis sur le site de l'IANA.

En savoir plus

Pour en savoir plus sur les clés d'accès, commencez par Se connecter sans mot de passe avec des clés d'accès.