Présentation détaillée de userVerification

Ce document décrit ce qu'est userVerification dans WebAuthn et les comportements du navigateur qui se produisent lorsque userVerification est spécifié lors de la création ou de l'authentification de la clé d'accès.

Qu'est-ce que la "validation de l'utilisateur" ? dans WebAuthn ?

Les clés d'accès reposent sur la cryptographie à clé publique. Lorsque vous créez une clé d'accès, une paire de clés publique-privée est générée, la clé privée est stockée par le fournisseur de clé d'accès et la clé publique est renvoyée au serveur du tiers de confiance pour la stocker. Le serveur peut authentifier un utilisateur en vérifiant une signature signée par la même clé d'accès à l'aide de la clé publique associée. L’« utilisateur présent » (UP) sur un identifiant de clé publique prouve qu'une personne a interagi avec l'appareil lors de l'authentification.

La vérification de l'utilisateur est une couche de sécurité facultative qui vise à vérifier que la bonne personne, et pas seulement une personne, était présente lors de l'authentification, comme le montre la présence de l'utilisateur. Sur les smartphones, cela se fait généralement à l'aide du mécanisme de verrouillage de l'écran, qu'il s'agisse d'une empreinte biométrique, d'un code ou d'un mot de passe. Si la validation de l'utilisateur a été effectuée est indiqué dans l'UV indicateur renvoyé dans les données de l'authentificateur lors de l'enregistrement et de l'authentification de la clé d'accès

<ph type="x-smartling-placeholder">
</ph> Capture d&#39;écran d&#39;une boîte de dialogue de validation d&#39;un utilisateur sur le trousseau iCloud sous macOS. La boîte de dialogue invite l&#39;utilisateur à se connecter à l&#39;aide de Touch ID, et affiche l&#39;origine de la demande d&#39;authentification, ainsi que le nom d&#39;utilisateur. En haut à droite de la boîte de dialogue, vous trouverez un bouton &quot;Annuler&quot;. <ph type="x-smartling-placeholder">
</ph> Boîte de dialogue de validation de l'utilisateur sur le trousseau iCloud sous macOS.
<ph type="x-smartling-placeholder">
</ph> Capture d&#39;écran d&#39;une boîte de dialogue de validation d&#39;un utilisateur dans Chrome pour Android. La boîte de dialogue invite l&#39;utilisateur à valider son identité à l&#39;aide de la reconnaissance faciale ou de la détection d&#39;empreintes digitales, et affiche l&#39;origine de la demande d&#39;authentification. L&#39;option de validation à l&#39;aide d&#39;un code apparaît en bas à gauche. <ph type="x-smartling-placeholder">
</ph> Boîte de dialogue de validation de l'utilisateur dans Chrome pour Android

Validation des mises à jour UP et UV sur le serveur

Les indicateurs booléens de présence de l'utilisateur (UP) et UV (vérifié par l'utilisateur) sont signalés au serveur dans le champ de données de l'authentificateur. Lors de l'authentification, le contenu du champ de données de l'authentificateur peut être validé en vérifiant la signature à l'aide de la clé publique stockée. Tant que la signature est valide, le serveur peut considérer les indicateurs comme authentiques.

<ph type="x-smartling-placeholder">
</ph> Représentation de la structure des données d&#39;authentification. De gauche à droite, chaque section de la structure de données indique &quot;RP ID HASH&quot;. (32 octets), &quot;FLAGS&quot; (1 octet), &#39;COUNTER&#39; (4 octets, uint32 big-endian), &quot;ATTESTE CRED. DATA (longueur variable, le cas échéant) et &quot;EXTENSIONS&quot; (longueur variable, le cas échéant (CBOR)). Les &quot;FLAGS&quot; est développée pour afficher une liste des indicateurs potentiels, libellés de gauche à droite : &quot;ED&quot;, &quot;AT&quot;, &quot;0&quot;, &quot;BS&quot;, &quot;BE&quot;, &quot;UV&quot;, &quot;0&quot; et &quot;UP&quot;. <ph type="x-smartling-placeholder">
</ph> Champs de données Authenticator dans un identifiant de clé publique.

Lors de l'enregistrement et de l'authentification de la clé d'accès, le serveur doit vérifier que l'indicateur UP est true et s'il est true ou false, selon les exigences.

Spécifier le paramètre userVerification

Conformément à la spécification WebAuthn, la RP peut demander une validation de l'utilisateur avec un paramètre userVerification lors de la création et de l'assertion des identifiants. Il accepte 'preferred', 'required' ou 'discouraged', ce qui signifie respectivement:

  • 'preferred' (par défaut): il est préférable d'utiliser une méthode de validation de l'utilisateur sur l'appareil, mais celle-ci peut être ignorée si elle n'est pas disponible. L'identifiant de réponse contient une valeur d'indicateur UV de true si la vérification de l'utilisateur a été effectuée et de false si aucune vérification UV n'a été effectuée.
  • 'required': vous devez appeler une méthode de validation de l'utilisateur disponible sur l'appareil. Si aucun n'est disponible, la requête échoue localement. Cela signifie que l'identifiant de réponse est toujours renvoyé avec l'indicateur UV défini sur true.
  • 'discouraged': nous vous déconseillons d'utiliser une méthode de validation des utilisateurs. Cependant, selon l'appareil, la validation de l'utilisateur peut être effectuée quand même, et l'indicateur UV peut contenir true ou false.

Exemple de code pour la création de clés d'accès:

const publicKeyCredentialCreationOptions = {
  // ...
  authenticatorSelection: {
    authenticatorAttachment: 'platform',
    residentKey: 'required',
    requireResidentKey: true,
    userVerification: 'preferred'
  }
};

const credential = await navigator.credentials.create({
  publicKey: publicKeyCredentialCreationOptions
});

Exemple de code pour l'authentification par clé d'accès:

const publicKeyCredentialRequestOptions = {
  challenge: /* Omitted challenge data... */,
  rpId: 'example.com',
  userVerification: 'preferred'
};

const credential = await navigator.credentials.get({
  publicKey: publicKeyCredentialRequestOptions
});

Quelle option devriez-vous choisir pour userVerification ?

La valeur userVerification à utiliser dépend des exigences de votre application ainsi que de vos besoins en termes d'expérience utilisateur.

Dans quel contexte utiliser userVerification='preferred' ?

Utilisez userVerification='preferred' si vous privilégiez l'expérience utilisateur à la protection.

Dans certains environnements, la vérification de l'utilisateur est plus complexe que la protection. Par exemple, sur macOS où Touch ID n'est pas disponible (parce que l'appareil n'est pas compatible, qu'il est désactivé ou que l'appareil est en mode clapet), l'utilisateur est invité à saisir son mot de passe système. Cela crée des frictions, et l'utilisateur peut abandonner complètement l'authentification. S'il est plus important pour vous d'éliminer les frictions, utilisez userVerification='preferred'.

<ph type="x-smartling-placeholder">
</ph> Capture d&#39;écran d&#39;une boîte de dialogue de clé d&#39;accès sur macOS qui s&#39;affiche lorsque Touch ID n&#39;est pas disponible. La boîte de dialogue contient des informations telles que l&#39;origine de la demande d&#39;authentification, ainsi que le nom d&#39;utilisateur. En haut à droite de la boîte de dialogue, vous trouverez un bouton &quot;Annuler&quot;. <ph type="x-smartling-placeholder">
</ph> Une boîte de dialogue pour les clés d'accès s'affiche sur macOS lorsque Touch ID n'est pas disponible.

Avec userVerification='preferred', l'indicateur UV est true si la validation de l'utilisateur a bien été effectuée et false si la validation de l'utilisateur est ignorée. Par exemple, sous macOS, où Touch ID n'est pas disponible, il demande à l'utilisateur de cliquer sur un bouton pour ignorer la validation de l'utilisateur. Les identifiants de la clé publique incluent un indicateur UV false.

L'indicateur UV peut alors être un signal dans votre analyse des risques. Si la tentative de connexion semble risquée en raison d'autres facteurs, vous pouvez présenter d'autres questions d'authentification à l'utilisateur si la validation de l'utilisateur n'a pas été effectuée.

<ph type="x-smartling-placeholder">

Dans quel contexte utiliser userVerification='required' ?

Utilisez userVerification='required' si vous pensez que les valeurs UP et UV sont absolument nécessaires.

Un inconvénient de cette option est que l'utilisateur peut rencontrer des difficultés lors de la connexion. Par exemple, sur macOS où Touch ID n'est pas disponible, l'utilisateur est invité à saisir son mot de passe système.

userVerification='required' vous permet de vous assurer que la validation de l'utilisateur est effectuée sur l'appareil. Assurez-vous que le serveur vérifie que l'indicateur UV est true.

Conclusion

Grâce à la validation des utilisateurs, les tiers qui s'appuient sur les clés d'accès peuvent évaluer la probabilité que le propriétaire de l'appareil se connecte. Ils décident d'exiger la validation de l'utilisateur ou de la rendre facultative en fonction de l'impact du mécanisme de connexion de remplacement sur le parcours utilisateur. Assurez-vous que le serveur vérifie les indicateurs UP et UV pour l'authentification des utilisateurs par clé d'accès.