Desde sgcWebSockets 2025.4.0 Enterprise, se admite el protocolo WebAuthn (actualmente en BETA).
WebAuthn (Web Authentication) es un estándar web desarrollado por el World Wide Web Consortium (W3C) y la FIDO Alliance para habilitar autenticación sin contraseña segura en la web. Forma parte del framework más amplio FIDO2 y busca reducir la dependencia de las contraseñas tradicionales, que suelen ser vulnerables a phishing, credential stuffing y otros ataques.
En esencia, WebAuthn permite autenticar a los usuarios mediante criptografía de clave pública. En lugar de un usuario y contraseña, los usuarios registran un par único de claves privada-pública con una aplicación web (el Relying Party). La clave privada se almacena de forma segura en un autenticador (una clave hardware, un smartphone o un dispositivo biométrico integrado), mientras que la clave pública se guarda en el servidor.
Durante la autenticación, el servidor emite un challenge que debe firmarse con la clave privada del usuario. El challenge firmado se devuelve y se verifica con la clave pública almacenada, asegurando la integridad y el origen de la respuesta. Este enfoque evita que las credenciales puedan ser interceptadas o reutilizadas.
WebAuthn admite una amplia variedad de autenticadores y dispositivos, lo que lo hace flexible tanto para desarrolladores como para usuarios. También permite autenticación multifactor (MFA) cuando se combina con otros factores como PIN o biometría, mejorando significativamente la seguridad sin sacrificar la usabilidad.
Formatos de atestación admitidos
Los distintos formatos de atestación definen cómo se estructuran y verifican estos datos. Tres formatos habituales son android-key, packed, y otros como fido-u2f, apple o none. Por defecto, todos los formatos de atestación están activados; a continuación se muestra la lista de formatos admitidos:
- NoneAttestation: en este caso no se devuelve ningún dato de atestación. Prioriza la privacidad del usuario evitando exponer identificadores de dispositivo. Común en aplicaciones donde la procedencia del dispositivo no importa.
- PackedAttestation: formato flexible y compacto usado por muchos autenticadores. El autenticador devuelve un certificado de atestación y una firma. Puede ser full attestation: firmada con una clave y un certificado proporcionados por el fabricante, o self attestation: firmada con la clave privada de la credencial. Es el más usado en distintas plataformas (p. ej., YubiKey, Windows Hello).
- TPMAttestation: usada por dispositivos con un Trusted Platform Module (TPM). La atestación se firma con claves del TPM e incluye una cadena de certificados. Se usa en sobremesas y portátiles corporativos con chip TPM (p. ej., máquinas Windows).
- AndroidKeyAttestation: usada por dispositivos Android con Android Keystore. La clave se genera en hardware y la atestación incluye información firmada por una cadena de certificados emitida por el fabricante del dispositivo. Se utiliza en móviles Android con keystores respaldados por hardware (TEE o StrongBox).
- AppleAttestation: usada por los autenticadores de la plataforma Apple, como Touch ID y Face ID. La atestación la generan las API internas de Apple e incluye un formato de certificado especial. Se utiliza en Safari con biometría de Apple.
- FidoU2FAttestation: formato de atestación legado usado por autenticadores FIDO U2F. Devuelve un certificado y una firma compatibles con U2F. Lo usan claves de seguridad antiguas (p. ej., primeras YubiKey) compatibles con FIDO U2F.
Flujo WebAuthn
- Registro WebAuthn: el servidor genera un challenge y lo envía al cliente, que usa un autenticador (p. ej., una clave de seguridad o un dispositivo biométrico) para crear un par de claves. La clave pública se devuelve y el servidor la almacena para futuras autenticaciones.
- Autenticación WebAuthn: el servidor envía un challenge al cliente, que lo firma con la clave privada previamente registrada almacenada en el autenticador. La respuesta firmada se verifica en el servidor con la clave pública guardada para confirmar la identidad del usuario.

Componente servidor WebAuthn
El componente TsgcWSAPIServer_WebAuthn proporciona una solución sencilla pero potente para implementar el servidor Relying Party de WebAuthn, habilitando autenticación sin contraseña en tu aplicación web. Una aplicación WebAuthn consiste en un WebAuthn server that handles the server-side registration and authentication and a client-side application that usually is a javascript application.Find below a simple configuration of the WebAuthn Server:
// ... 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;
Delphi WebAuthn Server Demo
The following Delphi WebAuthn Demo shows how to register a new credential and use after to authenticate the user.
