Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2021.
* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.
Contexte sécurisé: Cette fonctionnalité est uniquement disponible dans des contextes sécurisés (HTTPS), pour certains navigateurs qui la prennent en charge.
L'API Web Authentication est une extension de l'API Credential Management qui permet une authentification forte, basée sur la cryptographie à clé publique, rendant possible une authentification sans mot de passe ou l'implémentation d'une authentification avec un deuxième facteur, sans passer par des SMS.
L'API Web Authentication (qu'on pourrait traduire en « authentification web »), généralement désignée par le terme WebAuthn, utilise la cryptographie asymétrique (à clé publique) plutôt que des mots de passe ou des SMS pour l'enregistrement, l'authentification et l'authentification forte sur les sites web. Cela présente différents avantages :
Protection contre l'hameçonnage (phishing)Une personne malveillante qui crée un faux site de connexion ne peut pas récupérer les informations de l'utilisatrice ou de l'utilisateur, car la signature change avec l'origine du site.
Réduction de l'impact pour les fuites de donnéesLes équipes de développement n'ont pas besoin de calculer l'empreinte d'une clé publique. Si un acteur malveillant obtient la clé publique utilisée pour vérifier l'authentification, il ne peut pas s'authentifier sans la clé privée.
Invulnérabilité aux attaques basées sur les mots de passeCertaines personnes réutilisent des mots de passe entre plusieurs sites. Si le mot de passe est connu de quelqu'un d'autre, ce dernier peut s'authentifier à la place. Par ailleurs, certains services peuvent être ciblés par des attaques par force brute. En utilisant une signature numérique, on n'utilise pas de mot de passe et ces attaques ne s'appliquent plus.
De nombreux sites web ont des pages qui permettent de créer un compte ou de s'authentifier avec un compte existant. L'API Web Authentication peut remplacer ou compléter les fonctionnalités de ces pages. À l'instar des autres formes fournies par l'API Credential Management, l'API Web Authentication possède deux méthodes qui correspondent respectivement à l'enregistrement et à la connexion :
navigator.credentials.create()Lorsqu'elle est utilisée avec l'option publicKey, elle crée de nouvelles informations d'authentification pour enregistrer un nouveau compte ou pour associer une nouvelle paire de clés asymétrique avec un compte existant.
navigator.credentials.get()Lorsqu'elle est utilisée avec l'option publicKey, elle utilise des informations d'authentification existantes afin de s'authentifier sur un service, pour connecter la personne ou comme deuxième facteur d'authentification.
Note : Ces deux méthodes, create() et get(), doivent être utilisées depuis un contexte securisé (c'est-à-dire que la connexion au serveur soit en HTTPS ou que le site soit servi depuis localhost). Elles ne seront pas disponibles si le navigateur n'est pas dans un tel contexte.
Dans leurs formes les plus simples, create() et get() reçoivent un grand nombre aléatoire appelé « challenge » de la part du serveur et renvoient au serveur le challenge signé avec la clé privée. Cela prouve au serveur que la personne est en possession de la clé privée requise pour l'authentification, sans révéler de secrets sur le réseau.
Afin de comprendre le rôle général des méthodes create() et get(), il faut les resituer entre les deux composants qui existent en dehors du navigateur :
Le serveurL'API Web Authentication a pour but d'enregistrer des informations d'authentification sur un serveur (parfois aussi mentionné sous l'appellation service ou relying party (RP) en anglais (qu'on peut traduire en tiers de confiance)) pour que ces informations puissent être utilisées ultérieurement pour authentifier la personne sur ce même serveur.
L'authentificateurLes informations d'authentification sont créées et stockées sur un appareil appelé authentificateur. Il s'agit d'un concept récent pour l'authentification. Lors d'une authentification avec un mot de passe, le mot de passe est mémorisé par la personne et aucun autre appareil n'est nécessaire. En utilisant WebAuthn, le mot de passe se voit replacé par une paire de clés stockées dans l'authentificateur. Cet authentificateur peut être embarqué dans l'agent utilisateur, dans le système d'exploitation (par exemple Windows Hello) ou être un jeton physique comme une clé de sécurité USB ou Bluetooth.
Un enregistrement classique s'effectue en six étapes, comme illustré dans la figure qui suit et décrit ensuite. Les données nécessaires sont ici simplifiées, car il s'agit de fournir un aperçu. L'ensemble des champs nécessaires et optionnels ainsi que leur signification sont décrits dans le dictionnaire PublicKeyCredentialCreationOptions. De même, l'ensemble des champs associés à la réponse est décrit dans la page de l'interface PublicKeyCredential (où PublicKeyCredential.response correspond à l'interface AuthenticatorAttestationResponse) On notera que pour le développement d'une application sur la partie JavaScript, seules les étapes 1 et 5 où on appelle/gère le retour de la fonction create() sont nécessaires. Toutefois, les étapes 2, 3, et 4 sont essentielles pour bien comprendre le traitement qui a lieu dans le navigateur et l'authentificateur et ce que les données renvoyées signifient.
Figure 1 - Un diagramme illustrant la suite d'actions pour l'enregistrement d'un compte à l'aide de l'API Web Authentication et le flux des données importantes pour chaque action.
Pour commencer (l'étape 0 dans le diagramme), l'application effectue la requête d'enregistrement initiale. Le protocole et le format utilisés pour cette requête ne font pas partie de l'API Web Authentication.
Les étapes suivantes sont :
Le serveur envoie le challenge, les informations liées à l'utilisatrice ou à l'utilisateur et les informations relatives au tiers de confiance.
Attention : Il est absolument nécessaire que le challenge soit un tampon mémoire d'informations aléatoires (d'au moins 16 octets) et qui soit généré sur le serveur afin de garantir la sécurité du processus d'enregistrement.
Le navigateur appelle authenticatorMakeCredential() qui sollicite l'authentificateur.
L'authentificateur crée une nouvelle paire de clés et une attestation.
L'authentificateur renvoie les données au navigateur.
Le navigateur crée les données finales et l'application envoie la réponse au serveur.
Note : Les propriétés qui sont des ArrayBuffer doivent être encodés en base64 ou d'une autre façon.
Le serveur valide et finalise l'enregistrement.
Pour finir, le serveur réalise une suite de vérification pour s'assurer que l'enregistrement est terminé et qu'il n'y a pas eu de corruption. Parmi ces vérifications, on a :
Note : La liste complète des étapes de validation est détaillée dans la spécification de l'API.
Si toutes les vérifications sont réussies, le serveur enregistre la nouvelle clé publique pour le compte de la personne afin qu'elle puisse être utilisée par la suite (quand la personne s'authentifiera).
Lorsqu'une personne s'est enregistrée avec cette API, elle peut s'authentifier par la suite (autrement dit se connecter au service). Le processus d'authentification est similaire à celui d'enregistrement. La figure qui suit ressemble donc à la première. Les différences fondamentales entre l'enregistrement et l'authentification sont :
Là encore, la description qui suit est un aperçu général qui n'explore pas tous les détails et fonctionnalités de l'API Web Authentication. Les options qui concernent l'authentification sont décrites dans le dictionnaire PublicKeyCredentialRequestOptions, et les données résultantes sont décrites via l'interface PublicKeyCredential (dont la propriété PublicKeyCredential.response implémente l'interface AuthenticatorAssertionResponse).
Figure 2 - Un diagramme semblable au premier qui illustre la suite d'actions pour l'authentification et les données associées à chaque action.
Pour commencer (il s'agit de l'étape 0 sur le diagramme), l'application effectue la requête d'authentification initiale. Le protocole et le format utilisés pour cette requête ne sont pas dans le périmètre de l'API Web Authentication.
On a ensuite ces étapes pour l'authentification :
Le serveur envoie un challenge.
Attention : Il est crucial que le challenge soit un tampon d'informations aléatoires (au moins 16 octets) et que celui-ci ait été généré sur le serveur pour garantir la sécurité du processus d'authentification.
Le navigateur appelle authenticatorGetCredential() qui sollicite l'authentificateur.
L'authentificateur crée une assertion.
L'authentificateur renvoie les données au navigateur.
Le navigateur crée les données finales et l'application envoie sa réponse au serveur.
Le serveur valide les données reçues et finalise l'authentification.
À la réception de la réponse à la requête d'authentification, le serveur réalise une validation de la réponse avec différentes étapes comme :
Note : La liste complète des étapes de validation d'une assertion est détaillée dans la spécification de l'API.
Si la validation est réussie, le serveur notera que la personne est authentifiée. Bien que cela ne soit pas dans le périmètre de la spécification de l'API, cela pourra par exemple se traduire par le dépôt d'un cookie pour la session de la personne.
Fournit des informations sur une entité comme préalable à une décision de confiance.
CredentialsContainerExpose des méthodes pour demander des informations d'authentification et notifier l'agent utilisateur lorsque des évènements comme une connexion ou une déconnexion sont réussis. Cette interface est accessible via Navigator.credentials. La spécification Web Authentication ajoute une propriété d'option publicKey aux méthodes CredentialsContainer.create() et CredentialsContainer.get() afin de créer une nouvelle paire de clés ou d'obtenir une authentification à partir d'une paire de clés existante.
PublicKeyCredentialFournit des informations à propos d'une paire de clés publique et privée, composant les informations pour l'authentification à un service (fonctionnant sur une paire de clés asymétrique évitant les risques d'hameçonnage et de fuite des données qu'on rencontre lorsqu'on utilise des mots de passe).
AuthenticatorResponseL'interface de base pour AuthenticatorAttestationResponse et AuthenticatorAssertionResponse, qui fournit une racine de confiance cryptographique pour une paire de clés, renvoyées respectivement par CredentialsContainer.create() et CredentialsContainer.get(). Les interfaces enfant contiennent des informations du navigateur comme l'origine du challenge. On pourra obtenir un objet implémentant cette interface en consultant la propriété PublicKeyCredential.response.
AuthenticatorAttestationResponseLe type d'objet renvoyé par CredentialsContainer.create() lorsqu'on lui passe un objet PublicKeyCredential et qui fournit une racine de confiance cryptographique pour la nouvelle paire de clés qui a été générée.
AuthenticatorAssertionResponseLe type d'objet renvoyé par CredentialsContainer.get() lorsqu'on lui passe un objet PublicKeyCredential et qui fournit une preuve à un service qu'il dispose d'une paire de clés et que la requête d'authentification est valide et approuvée.
Les options passées à CredentialsContainer.create().
PublicKeyCredentialRequestOptionsLes options passées à CredentialsContainer.get().
Attention : Pour des raisons de sécurité, les appels à create() et get() sont annulés si la fenêtre du navigateur perd le focus lorsque l'appel est en attente.
| Web Authentication: An API for accessing Public Key Credentials - Level 3 # iface-pkcredential |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 1 déc. 2025 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.