Servidor WebAuthn para Delphi

Adicione autenticação sem senha baseada em passkey ao seu servidor Delphi. Cerimônias de registro e autenticação WebAuthn Level 2 / FIDO2, verificação de attestation e hooks de armazenamento de credenciais.

TsgcWSAPIServer_WebAuthn

Implementa o lado servidor da relying-party WebAuthn — crie desafios de credencial, verifique respostas de navigator.credentials, parse attestation statements e valide assinaturas de assertion.

Classe do componente

TsgcWSAPIServer_WebAuthn

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise

Configure a relying party e armazene credenciais

Adicione um TsgcWSAPIServer_WebAuthn a um TsgcWebSocketHTTPServer, defina WebAuthnOptions.RelyingParty e trate OnWebAuthnRegistrationSuccessful para armazenar cada nova passkey e OnWebAuthnAuthenticationGetCredential para recarregá-la no login.

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;

O que está incluído

Um servidor relying-party que transforma um processo Delphi em um endpoint de autenticação com suporte a passkeys.

Cerimônia de registro

OnWebAuthnRegistrationOptionsRequest recebe a solicitação de PublicKeyCredentialCreationOptions; o navegador invoca navigator.credentials.create(); o servidor valida o attestation e OnWebAuthnRegistrationSuccessful retorna o novo registro de credencial.

Cerimônia de autenticação

OnWebAuthnAuthenticationOptionsRequest preenche PublicKeyCredentialRequestOptions com os registros de credencial previamente armazenados; o servidor valida a assinatura de assertion usando a chave pública armazenada e dispara OnWebAuthnAuthenticationSuccessful.

Parsing de attestation

Suporta os formatos none, packed, fido-u2f, tpm, android-key, android-safetynet e apple.

Validação de contador

Rastreia o signCount por credencial para detectar autenticadores clonados. Se o contador regredir, OnWebAuthnAuthenticationError reporta um erro para que você possa agir.

Verificação de usuário

UserVerification pode ser definido como required, preferred ou discouraged por cerimônia — a etapa de validação aplica a escolha.

Registros de credencial

OnWebAuthnAuthenticationOptionsRequest fornece a solicitação para que você retorne os CredentialRecords corretos para a lista allowCredentials do login em andamento. O armazenamento é de sua responsabilidade.

Especificações & referências

Fontes oficiais dos padrões implementados por este componente.

Passkeys do jeito que os usuários esperam

Uma passkey é uma credencial WebAuthn detectável mantida pelo Windows Hello, iCloud Keychain, Gerenciador de Senhas do Google ou uma chave de segurança. O servidor suporta a experiência completa de passkeys enquanto as credenciais permanecem no seu próprio banco de dados.

Login sem nome de usuário

Solicite as opções de autenticação sem um nome de usuário. O navegador lista as passkeys que possui para o seu site, o usuário escolhe uma e o servidor verifica o userHandle retornado.

Preenchimento automático de passkey

Com mediação condicional, as passkeys aparecem na lista de preenchimento automático do campo de nome de usuário. Adicione autocomplete="username webauthn" e chame startAuthentication(options, true) a partir de /sgcWebAuthn.js.

Várias passkeys por usuário

Registre uma passkey no notebook e outra no celular. Todas as passkeys de uma conta compartilham um único user handle, e as opções de autenticação listam todas elas.

Sincronizada ou vinculada ao dispositivo

BackupEligible e BackupState no registro de credencial distinguem uma passkey sincronizada de uma chave de segurança vinculada ao dispositivo, permitindo sugerir uma segunda passkey a usuários com apenas um dispositivo.

Seu próprio banco de dados

Salve o registro em OnWebAuthnRegistrationSuccessful, procure a credencial de um login sem nome de usuário ou por preenchimento automático em OnWebAuthnAuthenticationGetCredential, e armazene o novo contador em OnWebAuthnAuthenticationSuccessful.

Detecção de autenticador clonado

Um contador de assinatura que não avança é rejeitado como possível clone, assim como um sinalizador de elegibilidade de backup que muda entre logins. Passkeys sincronizadas que sempre reportam 0 continuam funcionando.

Leia Passkeys em Delphi: login sem senha com WebAuthn e o tópico de ajuda sobre Passkeys.

Documentação & Demos

Acesse a referência do componente, obtenha o projeto de demo pronto para executar e baixe o trial.

Ajuda Online — TsgcWSAPIServer_WebAuthn Referência completa de propriedades, métodos e eventos deste componente.
Projeto de Demo — Demos\20.HTTP_Protocol\12.WebAuthn Projeto de exemplo pronto para executar. Incluído no pacote sgcWebSockets — baixe o trial abaixo.
Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente.
Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para Adicionar Autenticação com Passkey?

Baixe o trial gratuito e traga as passkeys WebAuthn / FIDO2 para o seu servidor Delphi.