Get your free and exclusive +45-page Authentication Analytics Whitepaper
Voltar à visão geral

9 bibliotecas de implementação de servidor WebAuthn comparadas

Esta postagem ajuda você a encontrar a biblioteca de servidor WebAuthn certa para oferecer chaves de acesso. 9 bibliotecas são comparadas e uma estratégia é apresentada.

Blog-Post-Author
Nicolai

Criado: 15 de dezembro de 2023

Atualizado: 27 de julho de 2026

9 bibliotecas de implementação de servidor WebAuthn comparadas

Esta página foi traduzida automaticamente. Leia a versão original em inglês aqui.

PasskeysCheatsheet Icon

Cheatsheet de Passkeys. Guias práticos, padrões de implementação e KPIs para programas de passkeys.

Obter cheat sheet
Principais fatos
  • SimpleWebAuthn (TypeScript, 1.000 estrelas no GitHub) é classificada como a mais intuitiva e oferece de forma exclusiva uma biblioteca de servidor e uma biblioteca de navegador frontend para a implementação de chaves de acesso.
  • A autenticação por chave de acesso requer pelo menos quatro endpoints de API de backend em comparação com um para autenticação por senha, tornando uma biblioteca de servidor WebAuthn essencial para lidar com a complexidade criptográfica.
  • py_webauthn (Python) é ideal para testes rápidos: as opções de autenticação são geradas com uma única chamada de método e não requerem configuração de framework.
  • webauthn-framework (PHP/Symfony, 347 estrelas) fornece a documentação conceitual mais extensa, sendo a melhor opção para desenvolvedores que estão aprendendo os fundamentos das chaves de acesso do zero.
  • Quando nenhuma biblioteca corresponder à sua linguagem, go-webauthn ou SimpleWebAuthn são os fallbacks recomendados devido à mais ampla adoção em projetos comerciais e de código aberto.

1. Introdução: implementação do servidor WebAuthn#

Fornecer uma autenticação de usuário segura e simples é essencial para empresas digitais em 2024. As chaves de acesso, como o novo padrão de login, são a solução ideal para atender a essas necessidades. No entanto, a experiência do usuário e a segurança aprimoradas das chaves de acesso para o usuário têm um preço na hora de implementá-las como desenvolvedor. A dificuldade de implementação decorre do fato de que as chaves de acesso são relativamente novas - para os usuários, mas também para os desenvolvedores - e que sua implementação pode ser bastante desafiadora em comparação com a autenticação baseada em senha. Na verdade, você precisa de pelo menos quatro endpoints de API para autenticação por chave de acesso, em comparação com um endpoint de API para autenticação por senha.

Um dos componentes principais no lado do servidor para fornecer autenticação por chave de acesso é o servidor WebAuthn (parte verde da biblioteca). Para um guia abrangente sobre como o servidor WebAuthn se encaixa na integração mais ampla da stack empresarial, consulte nosso artigo dedicado.

Fonte: Yubico

Nesta postagem do blog, comparamos várias bibliotecas/pacotes/SDKs de servidor WebAuthn, analisamos as diferenças e fornecemos uma recomendação para desenvolvedores que são novos na implementação de chaves de acesso.

2. Como posso implementar chaves de acesso por conta própria?#

Para entender melhor por que uma biblioteca de servidor WebAuthn é necessária em primeiro lugar, vamos ver como as chaves de acesso podem ser implementadas. Em princípio, existem duas maneiras de integrar chaves de acesso em sites e aplicativos:

  1. Usar uma solução de chaves de acesso de terceiros (por exemplo, Corbado)
  2. Implementar chaves de acesso por conta própria usando uma das bibliotecas de servidor WebAuthn abaixo

Embora uma solução de chave de acesso de terceiros seja fácil de integrar e geralmente economize muito tempo de engenharia (especialmente para casos extremos, manutenção, recuperação, fallbacks e UX de chave de acesso aprimorada), alguns desenvolvedores simplesmente preferem implementar tudo por conta própria.

Demo Icon

Teste passkeys em uma demo ao vivo.

Testar passkeys

Vamos dar uma olhada em como funciona a implementação da chave de acesso do tipo faça você mesmo. Em uma configuração muito básica, é necessário um mecanismo para registrar (inscrever-se) e autenticar (login). Ambos os processos, também chamados de cerimônias WebAuthn, são tratados de forma diferente, embora o fluxo geral siga um esquema semelhante:

  1. O frontend (o navegador) inicia uma solicitação de inscrição ou login e chama um endpoint da API do backend.
  2. O backend gera os parâmetros de inscrição ou login do WebAuthn. Eles são chamados de PublicKeyCredentialCreationOptions e PublicKeyCredentialRequestOptions, respectivamente. Uma das partes mais importantes desses parâmetros WebAuthn é o desafio (challenge). Os parâmetros WebAuthn são então enviados de volta ao frontend.
  3. O frontend recebe esses parâmetros WebAuthn e os utiliza para verificar a identidade do usuário usando o sistema de autenticação do dispositivo local (por exemplo, via Face ID, Touch ID, Windows Hello). Em processos de inscrição, um novo par de chaves pública-privada é criado, a chave privada é armazenada localmente, enquanto a chave pública é enviada ao servidor. Em processos de login, o desafio é assinado usando a chave privada da chave de acesso e enviado para outro endpoint da API do backend.
  4. Nos processos de inscrição, o backend recebe a chave pública e a armazena. Em logins, o backend recebe o desafio assinado e verifica sua integridade usando o servidor WebAuthn.

Como cada processo de inscrição/login envolve essas etapas, o backend precisa acompanhar usuários, chaves de acesso e solicitações de inscrição/login.

Igor Gjorgjioski Testimonial

Igor Gjorgjioski

Head of Digital Channels & Platform Enablement, VicRoads

We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.

See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.

Read the case study

Se você deseja obter um conhecimento mais profundo sobre a maneira como as chaves de acesso funcionam e como é uma implementação simples (sem usar uma solução de chave de acesso de terceiros), você pode investigar nosso artigo do blog aqui.

Em cenários da vida real, ao implementar chaves de acesso por conta própria, lembre-se de que não se trata apenas de fornecer os endpoints de API necessários e a implementação básica para se inscrever e fazer login. Além disso, você precisa abordar os seguintes tópicos e casos de uso:

  • Gerenciamento de dispositivos
  • Fluxos de login entre plataformas e entre dispositivos
  • Gerenciamento de usuários
  • Gerenciamento de sessões
  • Detecção de dispositivo pronto para chaves de acesso
  • Educação do usuário
  • Opções de autenticação de fallback
  • Mecanismos de recuperação
  • Opções de compartilhamento de conta
  • Fluxos de criação de chave de acesso otimizados e fluxos de login com chave de acesso para alta adoção

No entanto, para a implementação básica da chave de acesso, você só precisa aderir ao padrão WebAuthn. Implementar uma biblioteca de servidor WebAuthn conhecida e compatível geralmente é suficiente. A biblioteca gera os parâmetros do servidor WebAuthn e verifica os desafios de login, assumindo essencialmente a parte criptográfica e mais complexa para você.

Slack Icon

Participe da nossa comunidade de passkeys para atualizações e suporte.

Entrar

3. Bibliotecas de backend de servidor WebAuthn: uma comparação#

Todas as bibliotecas de servidor WebAuthn analisadas fornecem as funcionalidades necessárias para oferecer autenticação por chave de acesso. Portanto, prestamos atenção especial aos seguintes critérios:

  • Critérios de seleção do autenticador: Como você pode definir preferências para determinados comportamentos e recursos de segurança (por exemplo, forçar a criação de resident keys)?
  • Configurações globais: O quanto você pode centralizar a configuração necessária?
  • Documentação: Quão bem a biblioteca de servidor WebAuthn está documentada e fácil de seguir?
  • Exemplos: Existem exemplos de implementação que você possa tomar como referência?

As seguintes bibliotecas de servidor WebAuthn foram analisadas (ordenadas em número decrescente de estrelas no GitHub em dezembro de 2023):

StateOfPasskeys Icon

Veja quantas pessoas realmente usam passkeys.

Ver dados de adoção

3.1 TypeScript: SimpleWebAuthn#

  • Linguagem de programação: TypeScript
  • Framework: Node.js
  • Autor: Matthew Miller (Duo Security / Cisco)
  • Estrelas: 1000
  • Utilizado por: 781
  • Contribuidores: 19
  • Conformidade FIDO: Sim
  • Configurações globais: Não
  • Critérios de seleção do autenticador: Conforme sugerido pela W3C (deve conter as variáveis authenticatorAttachment, residentKey, requireResidentKey e userVerification, que também são explicadas na página da W3C)
  • Documentação: Muito bem estruturada, com foco em configuração rápida e facilidade de uso, inclui conhecimento sobre chaves de acesso, por exemplo, explica o que são as chaves de acesso e como funcionam
  • Exemplos: Projeto de exemplo disponível nos docs
  • Estruturas de dados recomendadas:
type UserModel = { id: string; username: string; currentChallenge?: string; }; /** * It is strongly advised that authenticators get their own DB * table, ideally with a foreign key to a specific UserModel. * * "SQL" tags below are suggestions for column data types and * how best to store data received during registration for use * in subsequent authentications. */ type Authenticator = { // SQL: Encode to base64url then store as `TEXT`. Index this column credentialID: Uint8Array; // SQL: Store raw bytes as `BYTEA`/`BLOB`/etc... credentialPublicKey: Uint8Array; // SQL: Consider `BIGINT` since some authenticators return atomic timestamps as counters counter: number; // SQL: `VARCHAR(32)` or similar, longest possible value is currently 12 characters // Ex: 'singleDevice' | 'multiDevice' credentialDeviceType: CredentialDeviceType; // SQL: `BOOL` or whatever similar type is supported credentialBackedUp: boolean; // SQL: `VARCHAR(255)` and store string array as a CSV string // Ex: ['usb' | 'ble' | 'nfc' | 'internal'] transports?: AuthenticatorTransport[]; };
  • Outras características: Ótimo Depurador WebAuthn para respostas WebAuthn e não oferece apenas uma biblioteca de backend/servidor, mas também uma biblioteca para o frontend (basicamente envolvendo algumas das APIs de Web Authentication do cliente)
  • Avaliação pessoal: A configuração mais intuitiva vista até agora e muito direta. Além disso, é uma das poucas bibliotecas que também oferece uma biblioteca de navegador para ajudar com implementações de cliente, o que a torna bastante notável. O autor da biblioteca é muito ativo na comunidade WebAuthn / chaves de acesso.
  • Link do GitHub: https://github.com/MasterKale/SimpleWebAuthn

3.2 .NET: fido2-net-lib#

  • Linguagem de programação: C#
  • Framework: .NET
  • Autores: Anders Åberg, Alex Seigler
  • Estrelas: 962
  • Utilizado por: 200
  • Contribuidores: 40
  • Conformidade FIDO: Sim
  • Configurações globais: Sim
  • Critérios de seleção do autenticador: Conforme sugerido pela W3C
  • Documentação: Apenas o Readme com alguns exemplos, alguma inteligência de chaves de acesso no site da biblioteca
  • Exemplos: Controlador de demonstração e repositório de credenciais de exemplo disponíveis para mostrar um exemplo de integração
  • Estrutura de dados recomendada:
public class StoredCredential { /// <summary> /// The Credential ID of the public key credential source. /// </summary> public byte[] Id { get; set; } /// <summary> /// The credential public key of the public key credential source. /// </summary> public byte[] PublicKey { get; set; } /// <summary> /// The latest value of the signature counter in the authenticator data from any ceremony using the public key credential source. /// </summary> public uint SignCount { get; set; } /// <summary> /// The value returned from getTransports() when the public key credential source was registered. /// </summary> public AuthenticatorTransport[] Transports { get; set; } /// <summary> /// The value of the BE flag when the public key credential source was created. /// </summary> public bool IsBackupEligible { get; set; } /// <summary> /// The latest value of the BS flag in the authenticator data from any ceremony using the public key credential source. /// </summary> public bool IsBackedUp { get; set; } /// <summary> /// The value of the attestationObject attribute when the public key credential source was registered. /// Storing this enables the Relying Party to reference the credent’al's attestation statement at a later time. /// </summary> public byte[] AttestationObject { get; set; } /// <summary> /// The value of the clientDataJSON attribute when the public key credential source was registered. /// Storing this in combination with the above attestationObject item enables the Relying Party to re-verify the attestation signature at a later time. /// </summary> public byte[] AttestationClientDataJson { get; set; } public List<byte[]> DevicePublicKeys { get; set; } public byte[] UserId { get; set; } public PublicKeyCredentialDescriptor Descriptor { get; set; } public byte[] UserHandle { get; set; } public string AttestationFormat { get; set; } public DateTimeOffset RegDate { get; set; } public Guid AaGuid { get; set; } }
  • Outras características: Utilizado pela Bitwarden (a startup passwordless.dev foi adquirida pela Bitwarden)
  • Avaliação pessoal: Biblioteca amigável para desenvolvedores com uma boa quantidade de material complementar
  • Link do GitHub: https://github.com/passwordless-lib/fido2-net-lib

3.3 Python: py_webauthn#

  • Linguagem de programação: Python
  • Framework: nenhum específico
  • Autor: Duo Labs
  • Estrelas: 727
  • Utilizado por: 912
  • Contribuidores: 23
  • Conformidade FIDO: N/A
  • Configurações globais: Não
  • Critérios de seleção do autenticador: Conforme sugerido pela W3C
  • Documentação: Pouca a nenhuma, conhecimento prévio de chaves de acesso é necessário
  • Exemplos: Pequenos trechos de código para inscrição e login estão incluídos
  • Estrutura de dados recomendada: N/A
  • Outras características: Requer Python >= 3.8
  • Avaliação pessoal: Biblioteca comparativamente compacta com pouca quantidade de arquivos, você pode obter uma visão geral em pouco tempo.
  • Link do GitHub: https://github.com/duo-labs/py_webauthn

3.4 Ruby: webauthn-ruby#

  • Linguagem de programação: Ruby
  • Framework: Ruby on Rails
  • Autor: Cedarcode
  • Estrelas: 580
  • Utilizado por: 679
  • Downloads do Gem: 18 milhões
  • Contribuidores: 27
  • Conformidade FIDO: Sim
  • Configurações globais: Sim
  • Critérios de seleção do autenticador: Conforme sugerido pela W3C
  • Documentação: O Readme é a única fonte de documentação
  • Exemplos: N/A
  • Estrutura de dados recomendada: N/A
  • Outras características: Wrappers para esta biblioteca também estão disponíveis (warden-webauthn, devise-passkeys)
  • Avaliação pessoal: Como o material complementar é bastante limitado, recomendaríamos esta biblioteca apenas se você estiver familiarizado com Ruby e chaves de acesso
  • Link do GitHub: https://github.com/cedarcode/webauthn-ruby

3.5 Go: go-webauthn#

  • Linguagem de programação: Go
  • Framework: Frameworks baseados em Go, como Gin, Echo,...
  • Autor: Originalmente por Duo Labs / continuado por James Elliott
  • Estrelas: 480
  • Utilizado por: 280
  • Contribuidores: 18
  • Conformidade FIDO: Sim
  • Configurações globais: Sim
  • Critérios de seleção do autenticador: Conforme sugerido pela W3C
  • Documentação: O Readme com alguns exemplos é a única fonte de documentação
  • Exemplos: Repositório de exemplo disponível
  • Estrutura de dados recomendada: N/A
  • Outras características: Grande número de arquivos, ter uma visão geral leva algum tempo
  • Avaliação pessoal: Biblioteca popular que é fácil de usar depois que você se familiariza com ela, no entanto, recomendamos adquirir algum conhecimento sobre chaves de acesso (como elas funcionam, como são os procedimentos, etc.) com antecedência.
  • Link do GitHub: https://github.com/go-webauthn/webauthn

3.6 Java: java-webauthn-server#

  • Linguagem de programação: Java
  • Framework: Maven / Gradle
  • Autor: Yubico
  • Estrelas: 391
  • Utilizado por: N/A
  • Contribuidores: 27
  • Conformidade FIDO: N/A
  • Configurações globais: Sim
  • Critérios de seleção do autenticador: Conforme sugerido pela W3C.
  • Documentação: O Readme é a única documentação, mas bastante detalhada
  • Exemplos: N/A
  • Estrutura de dados recomendada: N/A
  • Outras características: Vem com uma interface de repositório de credenciais, fornecendo orientação clara sobre os métodos de recuperação de banco de dados necessários.
  • Avaliação pessoal: Embora você precise gerenciar o banco de dados por conta própria, o repositório de credenciais ajuda significativamente no processo de design do banco de dados. Naturalmente, as implementações Java vêm com um grande número de arquivos, pois cada atributo precisa de uma classe que normalmente é armazenada em seu próprio arquivo. Isso torna a obtenção de uma visão geral uma tarefa mais demorada.
  • Link do GitHub: https://github.com/Yubico/java-webauthn-server

3.7 Rust: webauthn-rs#

  • Linguagem de programação: Rust
  • Framework: Baseado em Rust (Rocket, Axum, ...)
  • Autor: Kanidm Identity Management Project
  • Estrelas: 351
  • Utilizado por: 617
  • Contribuidores: 25
  • Conformidade FIDO: N/A
  • Configurações globais: Sim
  • Critérios de seleção do autenticador: Possibilidades de configuração muito limitadas. As outras bibliotecas são implementadas exatamente de acordo com o Padrão W3C, exibindo maior capacidade de configuração
  • Documentação: Existe uma documentação técnica gerada automaticamente, mas não muito detalhada
  • Exemplos: Repositório de tutorial com exemplos para 3 web frameworks diferentes está disponível
  • Estrutura de dados recomendada: N/A
  • Outras características: A biblioteca foi aprovada em uma auditoria de segurança executada pela segurança de produto da SUSE.
  • Avaliação pessoal: Devido à configurabilidade e documentação limitadas, recomendaríamos esta biblioteca apenas se o seu framework principal for baseado em Rust e você souber como as chaves de acesso funcionam
  • Link do GitHub: https://github.com/kanidm/webauthn-rs

3.8 PHP: webauthn-framework#

  • Linguagem de programação: PHP
  • Framework: Symfony
  • Autor: Florent Morselli
  • Estrelas: 347
  • Utilizado por: N/A
  • Contribuidores: 18
  • Conformidade FIDO: Sim
  • Configurações globais: Sim
  • Critérios de seleção do autenticador: Conforme sugerido pela W3C.
  • Documentação: Documentação extensa, incluindo detalhes técnicos, mas também explicando as chaves de acesso desde o início
  • Exemplos: Repositório de exemplo disponível
  • Estrutura de dados recomendada:
<?php declare(strict_types=1); namespace App\Entity; use App\Repository\PublicKeyCredentialSourceRepository; use DateTimeImmutable; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Uid\AbstractUid; use Symfony\Component\Uid\Uuid; use Webauthn\PublicKeyCredentialSource as BasePublicKeyCredentialSource; use Webauthn\TrustPath\TrustPath; #[ORM\Table(name: 'pk_credential_sources')] #[ORM\Entity(repositoryClass: PublicKeyCredentialSourceRepository::class)] class PublicKeyCredentialSource extends BasePublicKeyCredentialSource { #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] public readonly DateTimeImmutable $createdAt; #[ORM\Id] #[ORM\Column(type: Types::STRING, length: 255)] #[ORM\GeneratedValue(strategy: 'NONE')] private string $id; public function __construct( string $publicKeyCredentialId, string $type, array $transports, string $attestationType, TrustPath $trustPath, AbstractUid $aaguid, string $credentialPublicKey, string $userHandle, int $counter ) { $this->id = Uuid::v4()->toRfc4122(); $this->createdAt = new DateTimeImmutable(); parent::__construct($publicKeyCredentialId, $type, $transports, $attestationType, $trustPath, $aaguid, $credentialPublicKey, $userHandle, $counter); } public function getId(): string { return $this->id; } }

3.9 Java: webauthn4j#

  • Linguagem de programação: Java
  • Framework: Maven
  • Autor: WebAuthn4j
  • Estrelas: 342
  • Utilizado por: N/A
  • Contribuidores: 19
  • Conformidade FIDO: Sim
  • Configurações globais: Sim
  • Critérios de seleção do autenticador: Em vez do parâmetro UserVerificationRequirement sugerido pela W3C com valores desencorajados, preferidos ou exigidos, webauthn4j oferece verificationRequired e userPresenceRequired como variáveis booleanas
  • Documentação: Documentação seca, mas extensa, com alguns exemplos de código disponíveis
  • Exemplos: Repositório de exemplo disponível
  • Estrutura de dados recomendada: N/A
  • Outras características: N/A
  • Avaliação pessoal: A leitura da documentação se torna entediante e complexa rapidamente, pois é apenas uma grande página que se concentra exclusivamente na funcionalidade, não no conceito por trás das chaves de acesso.
  • Link do GitHub: https://github.com/webauthn4j/webauthn4j

A tabela a seguir fornece uma visão geral das bibliotecas do servidor WebAuthn:

Substack Icon

Assine nosso Substack de passkeys para receber as últimas novidades.

Assinar

4. Recomendações: navegando pelo cenário de bibliotecas WebAuthn#

4.1 Etapa 1: escolha sua biblioteca WebAuthn#

Como a maioria das bibliotecas é igualmente poderosa e implementa o padrão WebAuthn, recomendamos a seguinte árvore de decisão:

  • Uma biblioteca de servidor WebAuthn em seu framework e linguagem de programação está disponível: Não listamos as bibliotecas de framework que dependem de uma das bibliotecas acima (por exemplo, existem personalizações de PHP disponíveis para Symfony e Laravel). Caso exista uma implementação de framework, escolha esta, pois permite implementar as chamadas de API WebAuthn nativamente na sua estrutura de framework atual e usar sua abstração de banco de dados para implementar o armazenamento.
  • Uma biblioteca de servidor WebAuthn em sua linguagem de programação está disponível: Como você precisa de endpoints de API de backend, escolha a biblioteca de servidor WebAuthn na sua linguagem de programação nativa para que ela possa ser incorporada nativamente em seus endpoints de API atuais.
  • Não há nenhuma biblioteca de servidor WebAuthn disponível em sua linguagem de programação: Nesse caso, você deve considerar o uso de uma solução de chave de acesso gerenciada como o Corbado. Se isso não for uma opção, recomendamos o uso de go-webauthn ou SimpleWebAuthn, pois eles têm a maior adoção, são leves e também são usados por muitos projetos comerciais e de código aberto.

Se você quer apenas aprender mais sobre servidores WebAuthn em geral sem ter um projeto específico, podemos fazer algumas recomendações, pois existem algumas diferenças entre as bibliotecas e seus materiais complementares, como documentos e exemplos de implementações. Portanto, para desenvolvedores de software ansiosos para iniciar sua jornada de implementação de chaves de acesso, aconselhamos escolher as seguintes implementações:

  • Para testes rápidos: O pacote py_webauthn oferece implementação instantânea com trechos de código prontos para uso. Com apenas uma chamada de método, você pode gerar as opções de que precisa para a autenticação. Como você não precisa incorporar a biblioteca em um framework e configurá-la, ela é ideal para testes rápidos.
  • Para uma implementação intuitiva: O pacote SimpleWebAuthn escrito em TypeScript é direto e fácil para o desenvolvedor. Assim como o py_webauthn, a implementação é muito minimalista, mas vem adicionalmente com documentação que o orienta pelo processo de autenticação. Em contraste com o py_webauthn, no entanto, o SimpleWebAuthn não vem com um exemplo claro que seja executado sem modificações.
  • Para uma compreensão profunda: A biblioteca webauthn-framework para PHP se destaca por sua documentação extensa e estruturada, com foco em conceitos de chaves de acesso. As principais diferenças em relação a outras bibliotecas com uma boa quantidade de documentação, como webauthn4j, são o design e a vivacidade dos documentos.

Para um entendimento ainda mais profundo de como o WebAuthn funciona no lado do servidor, você pode ler a seção muito detalhada "WebAuthn Relying Party Operations" na RFC do WebAuthn, que detalha cada etapa que precisa ser implementada para o registro de uma nova credencial (7.1) e verificação de uma afirmação de autenticação (7.2).

4.2 Etapa 2: defina as opções do seu servidor WebAuthn#

Avalie as chaves de acesso específicas e os requisitos de WebAuthn que você tem. Nesta postagem do blog, presumimos que você deseja suportar apenas chaves de acesso como credenciais detectáveis (discoverable credentials). Leia sobre as opções PublicKeyCredentialCreationOptions e PublicKeyCredentialRequestOptions, juntamente com as chamadas de API WebAuthn client-side navigator.credentials.create() e navigator.credentials.get(), para definir os parâmetros na configuração do SDK do servidor WebAuthn corretamente para o seu caso de uso.

4.3 Etapa 3: defina a estrutura do banco de dados#

Para todas as bibliotecas de servidor WebAuthn, você precisará fornecer a estrutura de banco de dados apropriada para persistir / acessar as seguintes informações:

  • Credenciais
  • Usuários
  • Desafios
  • Autenticadores

Para algumas bibliotecas, há recomendações e exemplos específicos (se os acharmos úteis, os fornecemos acima). É essencial entender completamente quais campos WebAuthn precisam ser armazenados e onde. Preste atenção especial para identificar qual valor você deseja usar para o User ID (user.id). Temos uma explicação mais detalhada aqui. Leve também em consideração o que acontece quando um usuário exclui uma chave de acesso. Além disso, você pode opcionalmente restringir o uso de determinados autenticadores. Uma lista de autenticadores válidos relacionados a chaves de acesso pode ser encontrada aqui. Caso você também queira oferecer suporte e verificar os atestados (attestations) de chaves de segurança (security keys), essa é uma história totalmente diferente. Você encontra mais informações aqui.

4.4 Etapa 4: teste nos dispositivos de seus usuários#

Identifique em quais dispositivos seus usuários usarão chaves de acesso e métodos de autenticação de fallback. Caso você não tenha certeza sobre quais dispositivos, navegadores e sistemas operacionais seus usuários usam, confira o State of Passkeys para obter os dados mais recentes sobre a prontidão de chaves de acesso em plataformas, navegadores e sistemas operacionais. Se você tiver perguntas específicas sobre a adoção de chaves de acesso e a participação da prontidão para chaves de acesso em determinados dispositivos, sinta-se à vontade para entrar em contato conosco. Teremos o maior prazer em fornecer mais insights e ajudá-lo com este tópico (veja também nossa última postagem no blog sobre prontidão para chaves de acesso). Do ponto de vista da observabilidade, mantenha as falhas de WebAuthn do lado do cliente e as rejeições de verificação do servidor como fluxos separados; para definições de buckets do lado do cliente, use os erros de WebAuthn. Além disso, você deve ter em mente que, para o Windows 10 e o Linux, precisará criar soluções dedicadas, pois esses sistemas operacionais fornecem o menor (se houver) suporte a chaves de acesso.

StateOfPasskeys Icon

Veja quantas pessoas realmente usam passkeys.

Ver dados de adoção

5. Conclusão#

Para quase todas as linguagens ou frameworks existentes, já existe uma biblioteca de servidor WebAuthn bem estabelecida hoje. Comparar bibliotecas de diferentes linguagens não mostra uma superioridade clara de certas implementações. Em vez disso, você deve usar o framework / linguagem de programação com os quais está mais familiarizado. Alternativamente, se você não quer implementar o WebAuthn sozinho e cuidar de todas as coisas que vêm com isso, você pode tentar uma solução de autenticação de chave de acesso pré-construída dedicada como o Corbado. Colocando-se como uma solução de autenticação completa centrada na chave de acesso, ele vem com grande inteligência de chaves de acesso, gerenciamento de sessão, bem como métodos de autenticação de fallback, para que você possa se concentrar no desenvolvimento do seu produto e deixar de se preocupar com a autenticação. Você pode testá-lo gratuitamente com usuários ilimitados aqui.

Corbado

Sobre a Corbado

Corbado é a Authentication Intelligence Platform para times de CIAM que rodam autenticação consumer em escala. Mostramos o que logs de IDP e ferramentas genéricas de analytics não enxergam: quais dispositivos, versões de SO, navegadores e gerenciadores de credenciais suportam passkeys, por que os registros não viram logins, onde o fluxo WebAuthn falha e quando uma atualização de SO ou navegador quebra silenciosamente o login — tudo sem substituir Okta, Auth0, Ping, Cognito ou seu IDP interno. Dois produtos: Corbado Observe adiciona observabilidade para passkeys e qualquer outro método de login. Corbado Connect entrega passkeys gerenciados com analytics integrado (junto ao seu IDP). VicRoads roda passkeys para mais de 5M de usuários com Corbado (+80% de ativação de passkey). Fale com um especialista em Passkeys

Perguntas frequentes (FAQ)#

Como escolho a biblioteca de servidor WebAuthn certa para o meu projeto?#

Primeiro verifique se existe uma biblioteca para o seu framework específico, e depois para a sua linguagem de programação. Como todas as bibliotecas listadas implementam o padrão WebAuthn igualmente, a escolha deve priorizar a familiaridade com sua stack existente em vez de diferenças de recursos entre as bibliotecas.

Quais dados preciso armazenar no meu banco de dados ao criar um servidor WebAuthn?#

No mínimo, você deve persistir credenciais, usuários, desafios e autenticadores. Preste muita atenção a qual valor você atribui como o ID do usuário (userHandle), e planeje para cenários em que os usuários podem excluir uma chave de acesso de seu dispositivo.

Por que não posso simplesmente implementar a verificação do lado do servidor WebAuthn do zero sem uma biblioteca?#

As bibliotecas de servidor WebAuthn lidam com as operações criptográficas mais complexas: gerando parâmetros PublicKeyCredentialCreationOptions e PublicKeyCredentialRequestOptions e verificando desafios assinados. Fazer isso corretamente do zero é significativamente mais difícil do que usar uma biblioteca compatível com FIDO que já foi testada e auditada.

Quais sistemas operacionais têm o pior suporte para chaves de acesso e precisam de tratamento extra em uma implementação WebAuthn?#

O Windows 10 e o Linux fornecem o menor suporte para chaves de acesso, portanto, são necessárias soluções de fallback dedicadas para usuários nessas plataformas. Monitorar falhas do lado do cliente do WebAuthn e rejeições de verificação do servidor como fluxos separados ajuda a identificar problemas específicos do sistema operacional em produção.

Veja como a Corbado se encaixa na sua implementação de passkeys e no stack de autenticação atual.

Explorar a Console

Compartilhar este artigo


LinkedInTwitterFacebook