Servidor WebAuthn para Delphi

Añade autenticación sin contraseña basada en passkeys a tu servidor Delphi. Ceremonias de registro y autenticación WebAuthn Level 2 / FIDO2, verificación de attestation y hooks para el almacenamiento de credenciales.

TsgcWSAPIServer_WebAuthn

Implementa el lado servidor relying party de WebAuthn: crea desafíos de credenciales, verifica las respuestas de navigator.credentials, analiza las declaraciones de atestación y valida las firmas de aserción.

Clase del componente

TsgcWSAPIServer_WebAuthn

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Enterprise

Monta la relying party y guarda las credenciales

Añade un TsgcWSAPIServer_WebAuthn sobre un TsgcWebSocketHTTPServer, define WebAuthnOptions.RelyingParty y gestiona OnWebAuthnRegistrationSuccessful para guardar cada passkey nueva y OnWebAuthnAuthenticationGetCredential para recuperarla al iniciar sesión.

uses
  sgcWebSocket, sgcWebSocket_Server_APIs, sgcWebAuthn_Classes;

// Server: TsgcWebSocketHTTPServer and WebAuthn: TsgcWSAPIServer_WebAuthn are form fields
procedure TForm1.StartServer;
begin
  Server := TsgcWebSocketHTTPServer.Create(nil);
  Server.Port := 8443;
  Server.SSL  := True;
  Server.SSLOptions.CertFile := 'server.pem';
  Server.SSLOptions.KeyFile  := 'server.pem';
  Server.SSLOptions.Port     := 8443;

  WebAuthn := TsgcWSAPIServer_WebAuthn.Create(nil);
  WebAuthn.Server := Server;
  WebAuthn.WebAuthnOptions.RelyingParty := 'example.com';
  WebAuthn.OnWebAuthnRegistrationSuccessful := OnRegistrationSuccessful;
  WebAuthn.OnWebAuthnAuthenticationGetCredential := OnGetCredential;

  Server.Active := True;
end;

procedure TForm1.OnRegistrationSuccessful(Sender: TObject;
  const aRegistration: TsgcWebAuthn_Registration;
  const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Accept: Boolean);
begin
  // store the new passkey in your own database
  SaveCredential(aCredentialRecord.CredentialId, aCredentialRecord.AsJSON);
end;

procedure TForm1.OnGetCredential(Sender: TObject; const aCredentialId: string;
  const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean);
var
  vJSON: string;
begin
  // sign in: load the stored passkey back
  vJSON := LoadCredential(aCredentialId);
  Found := vJSON <> '';
  if Found then
    aCredentialRecord.ReadJSON(vJSON);
end;
// uses: sgcWebSocket, sgcWebSocket_Server_APIs
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
TsgcWSAPIServer_WebAuthn *WebAuthn = new TsgcWSAPIServer_WebAuthn(this);
WebAuthn->Server = Server;
WebAuthn->WebAuthnOptions->RelyingParty = "example.com";
Server->Active = true;

Qué incluye

Un servidor relying party que convierte un proceso Delphi en un endpoint de autenticación compatible con passkeys.

Ceremonia de registro

OnWebAuthnRegistrationOptionsRequest acepta la petición de PublicKeyCredentialCreationOptions; el navegador invoca navigator.credentials.create(); el servidor valida la attestation y OnWebAuthnRegistrationSuccessful devuelve el nuevo registro de credencial.

Ceremonia de autenticación

OnWebAuthnAuthenticationOptionsRequest rellena PublicKeyCredentialRequestOptions con los registros de credencial almacenados previamente; el servidor valida la firma de la assertion con la clave pública almacenada y dispara OnWebAuthnAuthenticationSuccessful.

Análisis de la atestación

Admite los formatos de declaración de atestación none, packed, fido-u2f, tpm, android-key, android-safetynet and apple.

Validación del contador

Realiza el seguimiento del signCount de cada credencial para detectar autenticadores clonados. Si el contador retrocede, OnWebAuthnAuthenticationError informa de un error sobre el que puedes actuar.

Verificación de usuario

UserVerification puede establecerse en required, preferred o discouraged en cada ceremonia — el paso de validación aplica la elección.

Registros de credenciales

OnWebAuthnAuthenticationOptionsRequest te entrega la petición para que devuelvas los CredentialRecords correctos para la lista allowCredentials del inicio de sesión en curso. El almacenamiento lo diseñas tú.

Especificaciones y referencias

Fuentes autorizadas de los estándares que implementa este componente.

Passkeys, tal como las esperan los usuarios

Una passkey es una credencial WebAuthn detectable que guarda Windows Hello, iCloud Keychain, Google Password Manager o una llave de seguridad. El servidor admite la experiencia de passkey completa mientras las credenciales permanecen en tu propia base de datos.

Inicio de sesión sin nombre de usuario

Solicita las opciones de autenticación sin un nombre de usuario. El navegador muestra las passkeys que tiene para tu sitio, el usuario elige una y el servidor comprueba el userHandle devuelto.

Autocompletado de passkeys

Con mediación condicional, las passkeys aparecen en la lista de autocompletado del campo de nombre de usuario. Añade autocomplete="username webauthn" y llama a startAuthentication(options, true) desde /sgcWebAuthn.js.

Varias passkeys por usuario

Registra una passkey en el portátil y otra en el móvil. Todas las passkeys de una cuenta comparten un mismo user handle y las opciones de autenticación las incluyen todas.

Sincronizadas o vinculadas al dispositivo

BackupEligible y BackupState en el registro de credencial distinguen una passkey sincronizada de una llave de seguridad vinculada al dispositivo, así puedes sugerir una segunda passkey a los usuarios con un solo dispositivo.

Tu propia base de datos

Guarda el registro en OnWebAuthnRegistrationSuccessful, busca la credencial de un inicio de sesión sin nombre de usuario o por autocompletado en OnWebAuthnAuthenticationGetCredential, y guarda el nuevo contador en OnWebAuthnAuthenticationSuccessful.

Detección de autenticadores clonados

Un contador de firma que no avanza se rechaza como posible clon, igual que un indicador de elegibilidad de copia de seguridad que cambia entre inicios de sesión. Las passkeys sincronizadas que siempre notifican 0 siguen funcionando.

Lee Passkeys en Delphi: inicio de sesión sin contraseña con WebAuthn y el tema de ayuda sobre Passkeys.

Documentación y Demos

Enlace directo a la referencia del componente, descarga el proyecto demo listo para ejecutar y la prueba gratuita.

Online Help — TsgcWSAPIServer_WebAuthn Referencia completa de propiedades, métodos y eventos de este componente.
Demo Project — Demos\20.HTTP_Protocol\12.WebAuthn Proyecto de ejemplo listo para ejecutar. Se incluye en el paquete sgcWebSockets — descarga la prueba gratuita más abajo.
Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi y C++ Builder y referencias de fuentes primarias — solo este componente.
Manual de usuario (PDF) Manual completo que cubre todos los componentes de la biblioteca.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

Ready to Add Passkey Authentication?

Descarga la prueba gratuita y lleva las passkeys WebAuthn / FIDO2 a tu servidor Delphi.