Ce document explique ce qu'est userVerification
dans WebAuthn et les comportements du navigateur qui en résultent lorsque userVerification
est spécifié lors de la création ou de l'authentification d'une clé d'accès.
Qu'est-ce que la "vérification 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és d'accès, et la clé publique est renvoyée au serveur de la partie prenante (RP) pour être stockée. 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'indicateur "utilisateur présent" (UP) sur un identifiant de clé publique prouve qu'une personne a interagi avec l'appareil lors de l'authentification.
La validation de l'utilisateur est une couche de sécurité facultative qui vise à affirmer que la bonne personne était présente lors de l'authentification, et non n'importe qui, comme le fait 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. L'état de la validation de l'utilisateur est indiqué dans 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.
Comment les autorisations d'accès et d'utilisation sont-elles validées sur le serveur ?
Les indicateurs booléens "user presence" (présence de l'utilisateur) et "user verified" (utilisateur authentifié) 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.
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 que l'indicateur UV est true
ou false
, selon les exigences.
Spécifier le paramètre userVerification
Conformément à la spécification WebAuthn, le RP peut demander une validation de l'utilisateur avec un paramètre userVerification
à la fois pour la création et l'assertion des identifiants. Il accepte 'preferred'
, 'required'
ou 'discouraged'
, ce qui signifie respectivement:
'preferred'
(par défaut): il est recommandé d'utiliser une méthode de validation de l'utilisateur sur l'appareil, mais vous pouvez l'ignorer si elle n'est pas disponible. L'identifiant de réponse contient une valeur d'indicateur UV detrue
si la validation de l'utilisateur a été effectuée et defalse
si elle ne l'a pas été.'required'
: l'appel d'une méthode de validation de l'utilisateur disponible sur l'appareil est obligatoire. 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 déconseillons d'utiliser une méthode de validation des utilisateurs. Toutefois, selon l'appareil, la validation de l'utilisateur peut être effectuée de toute façon, et l'indicateur UV peut contenirtrue
oufalse
.
Exemple de code pour la création d'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, 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 validation des utilisateurs est plus contraignante que protectrice. 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 qu'il est en mode clamshell), l'utilisateur est invité à saisir son mot de passe système à la place. Cela entraîne des frictions, et l'utilisateur peut abandonner l'authentification complètement. Si l'élimination des frictions est plus importante pour vous, utilisez userVerification='preferred'
.
Avec userVerification='preferred'
, l'indicateur UV est true
si la validation de l'utilisateur est effectuée avec succès et false
si la validation de l'utilisateur est ignorée. Par exemple, sous macOS, où Touch ID n'est pas disponible, l'utilisateur est invité à cliquer sur un bouton pour ignorer la validation de l'identité, et les identifiants de clé publique incluent un indicateur UV false
.
L'indicateur UV peut ensuite être utilisé comme signal dans votre analyse des risques. Si la tentative de connexion semble risquée en raison d'autres facteurs, vous pouvez présenter des questions d'authentification supplémentaires à l'utilisateur si la validation de l'utilisateur n'a pas été effectuée.
Dans quel contexte utiliser userVerification='required'
?
Utilisez userVerification='required'
si vous pensez que les deux sont absolument nécessaires.
L'inconvénient de cette option est que l'utilisateur peut rencontrer plus de frictions 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.
Avec userVerification='required'
, vous pouvez 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
En exploitant la validation de l'utilisateur, les tiers de confiance utilisant des clés d'accès peuvent évaluer la probabilité que le propriétaire de l'appareil se connecte. Il peut choisir 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 utilisateur par clé d'accès.