github.com/go-webauthn/webauthn (o fork mantido do duo-labs/webauthn) executa as duas cerimônias — BeginRegistration/FinishRegistration e BeginLogin/FinishLogin, ou as variantes Validate* para outros frameworks além do net/http — e verifica todos os formatos de atestado. O teste validou as mesmas respostas de autenticador em software usadas para o SimpleWebAuthn, o py_webauthn e o WebAuthn4J.
A política vem da configuração e é transportada em SessionData. Com um AuthenticatorSelection vazio, BeginRegistration enviou um objeto vazio, então os navegadores aplicam os padrões — verificação do usuário preferred, chave residente discouraged — e a validação aceitou respostas sem a flag UV porque a sessão pedia apenas preferred. Com UserVerification: required na sessão, a mesma asserção falhou com User verification required but flag not set by authenticator. Defina a política em Config.AuthenticatorSelection, como faz o exemplo, e armazene o SessionData inteiro entre as duas chamadas.
O tratamento do contador é a diferença mais importante em relação às outras bibliotecas. O login com uma asserção cujo contador (3) era menor que o armazenado (5) foi bem-sucedido: a credencial retornada veio com Authenticator.CloneWarning definido e com o SignCount mantido em 5. A biblioteca apenas informa um possível clone; recusar ou não o login cabe ao seu código, que deve verificar CloneWarning depois de cada login.
As assinaturas de asserção precisam estar em ASN.1 DER — uma assinatura r‖s bruta de 64 bytes falhou com Error validating the assertion signature: Signature invalid or not provided —, e uma assinatura DER high-S foi verificada. A lista padrão de pubKeyCredParams é longa: ES256, ES384 e ES512 (-7, -35, -36), RS256 a RS512 (-257 a -259), PS256 a PS512 (-37 a -39) e Ed25519 (-8); a credencial Ed25519 foi verificada de ponta a ponta. Não há entrada para ML-DSA na versão 0.18.2.
Decodifique o que um navegador envia com o inspetor de WebAuthn, consulte modelos de autenticador com a consulta de AAGUID e experimente as cerimônias no ambiente de testes de chaves de acesso.