1001Ferramentas
🔐 Segurança

Explicador de opções WebAuthn

Mostra cada campo de PublicKeyCredentialCreationOptions explicado (authenticatorAttachment, userVerification, residentKey) para devs.

As três opções que decidem se o seu WebAuthn é passkey ou segundo fator

Ao chamar navigator.credentials.create, três campos definem o comportamento do login, e a combinação entre eles é o que separa uma passkey de verdade de um segundo fator comum. Errar aqui produz um sistema que parece funcionar mas que não faz o que você imaginava — normalmente exigindo senha para sempre, quando a intenção era eliminá-la.

authenticatorAttachment escolhe o tipo de autenticador: platform aceita só o que está embutido no aparelho, como Touch ID e Windows Hello; cross-platform aceita só chave externa, como uma YubiKey; e omitir aceita os dois. userVerification decide se o autenticador precisa confirmar quem é a pessoa, com biometria ou PIN, ou se basta detectar presença. residentKey decide se a credencial fica guardada no autenticador, com identificador próprio — é isso que permite entrar sem digitar nome de usuário.

Selecione as três opções e a página explica cada escolha e diz o veredito: com userVerification obrigatório e residentKey obrigatória, você tem uma configuração passwordless; em qualquer outra combinação, é 2FA clássico, e a senha continua sendo necessária. Vale notar que residentKey obrigatória consome espaço no autenticador — chaves de segurança antigas guardam poucas dezenas de credenciais.

Perguntas frequentes

Passkey e WebAuthn são a mesma coisa?
WebAuthn é a API do navegador. Passkey é o nome comercial que se firmou para a credencial descobrível — a que fica guardada no autenticador e costuma sincronizar entre aparelhos pela conta da Apple, do Google ou de um gerenciador de senhas. Toda passkey usa WebAuthn, mas nem todo uso de WebAuthn é passkey.
Devo colocar userVerification como required?
Para passwordless, sim: sem verificar quem é a pessoa, quem estiver com o aparelho na mão entra. Para segundo fator depois de senha, preferred é razoável, porque a senha já cumpriu o papel de identificar. O que quase nunca faz sentido é discouraged em fluxo passwordless.
O servidor precisa guardar a chave pública?
Precisa, junto com o identificador da credencial e o contador de assinaturas. A chave privada nunca sai do autenticador — é essa a diferença em relação à senha, que existe dos dois lados. É por isso que vazamento do banco de dados não compromete as contas com passkey.

Ferramentas Relacionadas