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.
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.
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.
TsgcWSAPIServer_WebAuthn
Windows, macOS, Linux, iOS, Android
Enterprise
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;
Um servidor relying-party que transforma um processo Delphi em um endpoint de autenticação com suporte a passkeys.
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.
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.
Suporta os formatos none, packed, fido-u2f, tpm, android-key, android-safetynet e apple.
Rastreia o signCount por credencial para detectar autenticadores clonados. Se o contador regredir, OnWebAuthnAuthenticationError reporta um erro para que você possa agir.
UserVerification pode ser definido como required, preferred ou discouraged por cerimônia — a etapa de validação aplica a escolha.
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.
Fontes oficiais dos padrões implementados por este componente.
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.
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.
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.
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.
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.
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.
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.
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. | Open | |
| Projeto de Demo — Demos\20.HTTP_Protocol\12.WebAuthn Projeto de exemplo pronto para executar. Incluído no pacote sgcWebSockets — baixe o trial abaixo. | Open | |
| Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente. | Open | |
| Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca. | Open |