Ce document explique ce que userVerification
se trouve dans WebAuthn et les comportements du navigateur qui en résultent lorsque userVerification
est spécifié lors de la création d'une clé d'accès ou de l'authentification.
Qu'est-ce que la "validation de l'utilisateur" dans WebAuthn ?
Les clés d'accès sont basées sur la cryptographie à clé publique. La création d'une clé d'accès génère une paire de clés publique/privée, la clé privée est stockée par le fournisseur de clés d'accès, et la clé publique est renvoyée au serveur de la partie de confiance (RP) pour qu'elle soit stockée. Le serveur peut authentifier un utilisateur en validant une signature signée par la même clé d'accès à l'aide de la clé publique associée. L'indicateur "utilisateur présent" sur des identifiants de clé publique prouve que quelqu'un a interagi avec l'appareil lors de l'authentification.
La vérification de l'utilisateur est une couche de sécurité facultative qui vise à confirmer que la bonne personne était présente lors de l'authentification, et pas seulement une personne, à mesure que la présence de l'utilisateur est déclarée. Sur les smartphones, cette opération s'effectue 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 PIN ou d'un mot de passe. L'indicateur "UV" renvoyé dans les données de l'authentificateur lors de l'enregistrement et de l'authentification de la clé d'accès indique si la validation de l'utilisateur a été effectuée
![Capture d'écran d'une boîte de dialogue de validation de l'utilisateur sur un trousseau iCloud sous macOS. La boîte de dialogue invite l'utilisateur à se connecter à l'aide de Touch ID. Elle affiche l'origine de la demande d'authentification, ainsi que le nom d'utilisateur. En haut à droite de la boîte de dialogue, vous trouverez un bouton "Annuler".](https://web.dev/static/articles/webauthn-user-verification/image/fig-1.png?authuser=6&hl=fr)
![Capture d'écran d'une boîte de dialogue de validation de l'utilisateur dans Chrome pour Android. La boîte de dialogue invite l'utilisateur à valider son identité à l'aide de la reconnaissance faciale ou d'empreinte digitale, et affiche l'origine de la demande d'authentification. Une option en bas à gauche vous permet de valider votre établissement à l'aide d'un code.](https://web.dev/static/articles/webauthn-user-verification/image/fig-2.png?authuser=6&hl=fr)
Comment valider les propriétés UP et UV sur le serveur
Les indicateurs booléens de présence de l'utilisateur (UP) et d'utilisateur validé (UV) 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.
![Représentation de la structure des données d'authentification. De gauche à droite, chaque section de la structure de données indique "RP ID HASH" (32 octets), "FLAGS" (1 octet), "COUNTER" (4 octets, big-endian uint32), "ATTESTE CRED". DATA" (longueur variable si disponible) et "EXTENSIONS" (longueur variable si disponible (CBOR)). La section "FLAGS" est développée pour afficher une liste de drapeaux potentiels, libellés de gauche à droite: "ED", "AT", "0", "BS", "BE", "UV", "0" et "UP".](https://web.dev/static/articles/webauthn-user-verification/image/fig-3.png?authuser=6&hl=fr)
Lors de l'enregistrement et de l'authentification d'une clé d'accès, le serveur doit vérifier que l'indicateur UP est true
et si l'indicateur UV est true
ou false
, selon les exigences.
Spécifier le paramètre userVerification
Conformément à la spécification WebAuthn, le tiers assujetti à des restrictions peut demander une vérification de l'utilisateur avec un paramètre userVerification
lors de la création et de l'assertion des identifiants. Elle accepte 'preferred'
, 'required'
ou 'discouraged'
, ce qui signifie respectivement:
'preferred'
(par défaut): il est recommandé d'utiliser la méthode de validation de l'utilisateur sur l'appareil, mais vous pouvez l'ignorer si elle n'est pas disponible. Les identifiants de réponse contiennent une valeur d'indicateur UVtrue
si la vérification de l'utilisateur a été effectuée etfalse
si aucun UV n'a été effectué.'required'
: il est nécessaire d'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 les identifiants de réponse sont toujours renvoyés avec l'indicateur UV défini surtrue
.'discouraged'
: nous vous déconseillons d'utiliser une méthode de validation de l'utilisateur. Toutefois, selon l'appareil, la validation de l'utilisateur peut quand même être effectuée, et l'indicateur UV peut contenirtrue
oufalse
.
Exemple de code pour créer une clé 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 devez-vous choisir pour userVerification
?
La valeur userVerification
à utiliser dépend des exigences de votre application et de l'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, lorsque Touch ID n'est pas disponible (parce que l'appareil n'est pas compatible, parce qu'il est désactivé ou parce qu'il est en mode clapet), l'utilisateur est invité à saisir son mot de passe système. Cela crée des frictions et l'utilisateur peut renoncer complètement à l'authentification. Si vous avez plus d'importance pour vous de faciliter la tâche, utilisez userVerification='preferred'
.
![Capture d'écran d'une boîte de dialogue de clé d'accès sous macOS qui s'affiche lorsque Touch ID n'est pas disponible. La boîte de dialogue contient des informations telles que l'origine de la demande d'authentification et le nom d'utilisateur. En haut à droite de la boîte de dialogue, vous trouverez un bouton "Annuler".](https://web.dev/static/articles/webauthn-user-verification/image/fig-4.png?authuser=6&hl=fr)
Avec userVerification='preferred'
, l'indicateur UV est true
si la vérification de l'utilisateur est effectuée et false
si la vérification de l'utilisateur est ignorée. Par exemple, sur macOS, Touch ID n'est pas disponible. L'utilisateur est invité à cliquer sur un bouton pour ignorer la validation de l'utilisateur. Les identifiants de 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 proposer d'autres questions d'authentification à la connexion à l'utilisateur si la vérification de l'utilisateur n'a pas été effectuée.
Dans quel contexte utiliser userVerification='required'
?
Utilisez userVerification='required'
si vous pensez que les valeurs UP et UV sont absolument nécessaires.
Cette option présente un inconvénient : la connexion est plus compliquée pour l'utilisateur. 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 vérification de l'utilisateur, les tiers qui s'appuient sur une clé d'accès peuvent évaluer la probabilité que le propriétaire de l'appareil se connecte. Il leur appartient de décider 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.