github.com/go-webauthn/webauthn (le fork maintenu de duo-labs/webauthn) prend en charge les deux cérémonies (BeginRegistration/FinishRegistration et BeginLogin/FinishLogin, ou leurs variantes Validate* pour les frameworks autres que net/http) et vérifie tous les formats d’attestation. Les essais ont validé les mêmes réponses d’authentificateur logiciel que pour SimpleWebAuthn, py_webauthn et WebAuthn4J.
La politique vient de la configuration et elle est transportée dans SessionData. Avec un AuthenticatorSelection vide, BeginRegistration a envoyé un objet vide, si bien que les navigateurs appliquent les valeurs par défaut (vérification de l’utilisateur preferred, clé résidente discouraged), et la validation a accepté des réponses dont l’indicateur UV n’était pas positionné, car la session ne demandait que preferred. Avec UserVerification: required dans la session, la même assertion a échoué avec User verification required but flag not set by authenticator. Définissez la politique dans Config.AuthenticatorSelection, comme le fait l’exemple, et conservez l’intégralité de SessionData entre les deux appels.
La gestion du compteur est la principale différence avec les autres bibliothèques. Une assertion dont le compteur (3) était inférieur à la valeur enregistrée (5) a permis de se connecter : l’identifiant renvoyé avait Authenticator.CloneWarning positionné et son SignCount laissé à 5. La bibliothèque se contente de signaler un clonage possible ; refuser ou non la connexion relève de votre code, qui doit contrôler CloneWarning après chaque connexion.
Les signatures d’assertion doivent être en ASN.1 DER (une signature r‖s brute de 64 octets a échoué avec Error validating the assertion signature: Signature invalid or not provided), et une signature DER high-S a été vérifiée. La liste pubKeyCredParams par défaut est longue : ES256, ES384 et ES512 (-7, -35, -36), RS256 à RS512 (-257 à -259), PS256 à PS512 (-37 à -39) et Ed25519 (-8) ; l’identifiant Ed25519 a été vérifié de bout en bout. La 0.18.2 ne comporte aucune entrée ML-DSA.
Décodez ce qu’envoie un navigateur avec l’inspecteur WebAuthn, identifiez les modèles d’authentificateurs avec la recherche d’AAGUID et essayez les cérémonies dans le bac à sable des clés d’accès.