A partir do sgcWebSockets 2025.4.0 Enterprise, o Protocolo WebAuthn é suportado (atualmente em BETA).
WebAuthn (Web Authentication) é um padrão web desenvolvido pelo World Wide Web Consortium (W3C) e pela FIDO Alliance para habilitar autenticação segura e sem senha na web. Faz parte do framework FIDO2 e tem como objetivo reduzir a dependência de senhas tradicionais, que frequentemente são vulneráveis a phishing, credential stuffing e outros ataques.
Em essência, o WebAuthn permite que os usuários se autentiquem usando criptografia de chave pública. Em vez de usuário e senha, os usuários registram um par de chaves pública-privada único com uma aplicação web (o Relying Party). A chave privada é armazenada de forma segura em um autenticador — como uma chave de segurança física, smartphone ou dispositivo biométrico integrado — enquanto a chave pública é armazenada no servidor.
Durante a autenticação, o servidor emite um desafio que deve ser assinado pela chave privada do usuário. O desafio assinado é retornado e verificado usando a chave pública armazenada, garantindo tanto a integridade quanto a origem da resposta. Essa abordagem impede que as credenciais sejam interceptadas ou reutilizadas.
O WebAuthn suporta uma variedade de autenticadores e dispositivos, tornando-o flexível tanto para desenvolvedores quanto para usuários. Ele também permite autenticação multifator (MFA) quando combinado com outros fatores como PINs ou biometria, melhorando significativamente a segurança sem sacrificar a usabilidade.
Formatos de Attestation Suportados
Diferentes formatos de attestation definem como esses dados são estruturados e verificados. Três formatos comumente usados são android-key, packed e outros como fido-u2f, apple ou none. Por padrão, todos os formatos de attestation estão habilitados; veja abaixo a lista de formatos suportados:
- NoneAttestation: neste caso, nenhum dado de attestation é retornado. Prioriza a privacidade do usuário evitando a exposição de identificadores do dispositivo. Comum em aplicações que não se preocupam com a proveniência do dispositivo.
- PackedAttestation: é um formato flexível e compacto usado por muitos autenticadores. O autenticador retorna um certificado de attestation e uma assinatura. Pode ser: Full attestation: assinado com uma chave e certificado fornecidos pelo fabricante, ou Self attestation: assinado usando a chave privada da credencial. Mais amplamente usado em diferentes plataformas (ex.: YubiKey, Windows Hello).
- TPMAttestation: usado por dispositivos com Trusted Platform Module (TPM). A attestation é assinada usando chaves do TPM e inclui uma cadeia de certificados. Usado em desktops/laptops empresariais com chips TPM (ex.: máquinas Windows).
- AndroidKeyAttestation: usado por dispositivos Android com o Android Keystore. A chave é gerada em hardware, e a attestation inclui informações assinadas por uma cadeia de certificados emitida pelo fabricante do dispositivo. Usado em smartphones Android com keystores suportados por hardware (TEE ou StrongBox).
- AppleAttestation: usado por autenticadores da plataforma Apple, como Touch ID e Face ID. A attestation é gerada pelas APIs internas da Apple e inclui um formato de certificado especial. Usado no Safari com biometria Apple.
- FidoU2FAttestation: formato de attestation legado usado por autenticadores FIDO U2F. Retorna um certificado e assinatura compatíveis com U2F. Usado por chaves de segurança mais antigas (ex.: primeiros YubiKeys) que suportam FIDO U2F.
Fluxo do WebAuthn
- Registro WebAuthn: O servidor gera um desafio e o envia ao cliente, que usa um autenticador (ex.: chave de segurança ou dispositivo biométrico) para criar um par de chaves. A chave pública é enviada de volta e armazenada pelo servidor para autenticação futura.
- Autenticação WebAuthn: O servidor envia um desafio ao cliente, que o assina usando a chave privada anteriormente registrada no autenticador. A resposta assinada é verificada pelo servidor usando a chave pública armazenada para confirmar a identidade do usuário.

Componente Servidor WebAuthn
O componente TsgcWSAPIServer_WebAuthn fornece uma solução simples, mas poderosa, para implementar o servidor Relying Party do WebAuthn, habilitando autenticação sem senha em sua aplicação web. Uma aplicação WebAuthn consiste em um servidor WebAuthn que trata o registro e a autenticação no lado do servidor, e uma aplicação do lado do cliente que geralmente é uma aplicação JavaScript.Veja abaixo uma configuração simples do Servidor WebAuthn:
// ... create the servers
HTTPServer := TsgcWebSocketHTTPServer.Create(nil);
WebAuthnServer := TsgcWSAPIServer_WebAuthn.Create(nil);
WebAuthnServer.Server := HTTPServer;
// ... enable for testing
WebAuthnServer.EndpointsOptions.Test.Enabled := True;
// ... WebAuthn options
WebAuthnServer.WebAuthnOptions.RelyingParty := 'localhost';
// ... bindings
Server.Port := 443;
HTTPServer.SSLOptions.Port := 443;
HTTPServer.Bindings.Clear;
With HTTPServer.Bindings.Add do
begin
Port := 443;
IP := '127.0.0.1';
end;
HTTPServer.SSLOptions.Certificate := 'sgc.pem';
HTTPServer.SSLOptions.KeyFile := 'sgc.pem';
HTTPServer.SSL := True;
// ... active
HTTPServer.Active := True;
Demo do Servidor WebAuthn em Delphi
A Demo WebAuthn em Delphi a seguir mostra como registrar uma nova credencial e usá-la em seguida para autenticar o usuário.
