Inspecter les données d’identification WebAuthn

Collez une réponse d’enregistrement ou d’authentification sérialisée pour examiner ses données. Le décodage ne vérifie ni les signatures, ni l’attestation, ni le défi du serveur.

Fonctionne localement dans votre navigateur
Les données d'identification sont analysées uniquement dans ce navigateur. Cette page ne crée pas d'informations d'identification, n'appelle pas navigator.credentials et ne valide pas de signature par rapport à une demande d'authentification du serveur.
Identifiant WebAuthn JSONRéponse PublicKeyCredential sérialisée
Données client et authentifiant décodées

Inspectez les preuves de la cérémonie, vérifiez-les côté serveur

Une partie utilisatrice de production doit vérifier le défi, l'origine, le hachage de l'ID RP, la politique de présence ou de vérification de l'utilisateur, la signature, les algorithmes, la politique d'attestation et le comportement du compteur de signatures.

Décoder une information d’identification WebAuthn et vérifier ses indicateurs

Cette page lit une PublicKeyCredential sérialisée — le JSON qu’une partie utilisatrice reçoit de navigator.credentials.create() ou navigator.credentials.get() — et rend ses deux moitiés lisibles — le plus souvent le moyen le plus rapide de voir ce que contenait réellement un enregistrement ou une assertion en échec. clientDataJSON est décodé depuis Base64URL puis analysé, et les données de l’authentificateur sont séparées en hachage de l’ID RP, octet d’indicateurs, compteur de signatures et, pour un enregistrement, AAGUID, ID d’identification et clé publique COSE.

Tout s’exécute dans le navigateur. La page n’appelle pas navigator.credentials, ne contacte aucune partie utilisatrice et n’envoie nulle part l’information d’identification. Décoder n’est pas vérifier : la signature, la déclaration d’attestation et la comparaison du défi appartiennent à votre serveur.

  1. Collez le JSON de l’information d’identification dans le premier panneau. L’objet complet avec id, rawId, type et response est accepté, tout comme le seul objet response.
  2. Cliquez sur Inspecter l’information d’identification. Le résumé affiche le type de cérémonie, l’origine, le défi, l’indicateur d’origine croisée, l’ID d’identification, le hachage de l’ID RP, le compteur de signatures, l’AAGUID et les champs de la clé COSE, et les pastilles s’allument pour UP, UV, BE, BS, AT et ED.
  3. Cliquez sur Exemple d’authentification ou Exemple d’inscription pour disposer d’une information connue à comparer. L’exemple d’authentification contient des authenticatorData brutes de 37 octets ; l’exemple d’inscription est un attestationObject dont la carte CBOR porte les données de l’authentificateur, un AAGUID nul et une clé P-256.
  4. Lisez la liste des résultats en même temps que les valeurs : elle rappelle ce que les octets décodés ne prouvent pas — qu’un défi a été comparé à une session serveur, qu’une origine figure dans une liste autorisée, qu’une signature a été vérifiée.
  5. Utilisez Copier le rapport pour emporter le rapport JSON, puis Effacer pour vider le panneau et réinitialiser le résumé avant l’information suivante.

Ce que signifient les champs décodés

Indicateurs, compteurs et identifiants

L’octet d’indicateurs décrit la cérémonie, pas l’information d’identification. UP signale un utilisateur présent, UV une vérification par code ou biométrie, BE que l’information peut être copiée vers un autre authentificateur et BS qu’elle l’est actuellement — une passkey synchronisée active les deux. AT marque les données attestées (AAGUID, ID d’identification et clé publique) qui n’existent que lors d’un enregistrement, ED les données d’extension.

Le compteur de signatures est un entier non signé de 32 bits que l’authentificateur incrémente à chaque assertion. Le comparer à la valeur enregistrée pour cette information est le contrôle de clone classique, mais un compteur qui ne bouge jamais ne prouve rien à lui seul : beaucoup d’authentificateurs de plateforme renvoient zéro en permanence. Le hachage de l’ID RP est le SHA-256 de l’identifiant de la partie utilisatrice pour lequel l’information a été créée ; le comparer à la valeur attendue montre qu’une information captée sur un site n’est pas rejouée sur un autre.

L’origine de chaque champ

clientDataJSON est du JSON encodé en Base64URL que le navigateur assemble à partir du défi, de l’origine et du type de cérémonie (webauthn.create ou webauthn.get). La page le décode, l’analyse et signale crossOrigin lorsque le navigateur a marqué le flux comme intégré à une autre page. Les octets suivants forment une structure binaire compacte : 32 octets de hachage de l’ID RP, un octet d’indicateurs, quatre octets de compteur, puis les données attestées uniquement si l’indicateur AT est actif.

Une réponse d’enregistrement contient un attestationObject, une carte CBOR qui porte les mêmes données d’authentificateur sous authData ; la page parcourt la carte CBOR pour les atteindre. Le format et la déclaration d’attestation qui l’accompagnent ne sont ni affichés ni contrôlés ici. Les champs que le navigateur ajoute autour de la réponse, comme transports et clientExtensionResults, ne figurent pas non plus dans le rapport.

Ce qui reste à faire côté serveur

Une information d’identification décodée est un indice, pas une preuve. La partie utilisatrice doit encore comparer le défi à celui qu’elle a émis pour cette session, vérifier que l’origine est la sienne, comparer le hachage de l’ID RP à l’ID RP attendu et vérifier la signature sur les données de l’authentificateur et le SHA-256 de clientDataJSON avec la clé publique conservée lors de l’enregistrement.

Elle doit aussi appliquer sa propre politique de vérification de l’utilisateur et d’attestation, restreindre les algorithmes acceptés et décider ce que le compteur de signatures et les indicateurs de sauvegarde signifient pour son modèle de menace. Cette page nomme les valeurs COSE qu’elle reconnaît — ES256, EdDSA, ES384, ES512, PS256, PS384, PS512, RS256, RS384, RS512 avec les courbes P-256, P-384, P-521, Ed25519 et Ed448 — et affiche toute autre valeur sous forme de nombre brut, ce qui est une étiquette et non une décision de politique.

Outils récents :