Server WebAuthn per Delphi
Aggiungi al tuo server Delphi l'autenticazione senza password basata su passkey. Cerimonie di registrazione e autenticazione WebAuthn Level 2 / FIDO2, verifica delle attestation, hook per lo storage delle credenziali.
Aggiungi al tuo server Delphi l'autenticazione senza password basata su passkey. Cerimonie di registrazione e autenticazione WebAuthn Level 2 / FIDO2, verifica delle attestation, hook per lo storage delle credenziali.
Implementa il lato server relying-party di WebAuthn — crea challenge per le credenziali, verifica le risposte di navigator.credentials, parsa gli statement di attestation e convalida le firme di assertion.
TsgcWSAPIServer_WebAuthn
Windows, macOS, Linux, iOS, Android
Enterprise
Trascina un TsgcWSAPIServer_WebAuthn su un TsgcWebSocketHTTPServer, imposta WebAuthnOptions.RelyingParty, poi gestisci OnWebAuthnRegistrationSuccessful per salvare ogni nuova passkey e OnWebAuthnAuthenticationGetCredential per recuperarla in fase di accesso.
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;
Un server relying-party che trasforma un processo Delphi in un endpoint di autenticazione compatibile con le passkey.
OnWebAuthnRegistrationOptionsRequest accetta la richiesta delle PublicKeyCredentialCreationOptions; il browser invoca navigator.credentials.create(); il server convalida l'attestation e OnWebAuthnRegistrationSuccessful restituisce il nuovo record di credenziale.
OnWebAuthnAuthenticationOptionsRequest popola le PublicKeyCredentialRequestOptions con i record di credenziale memorizzati in precedenza; il server convalida la firma di assertion usando la chiave pubblica memorizzata e genera OnWebAuthnAuthenticationSuccessful.
Supporta i formati di statement di attestation none, packed, fido-u2f, tpm, android-key, android-safetynet e apple.
Traccia il signCount per credenziale per rilevare authenticator clonati. Se il counter regredisce, OnWebAuthnAuthenticationError segnala un errore su cui puoi intervenire.
UserVerification può essere impostato su required, preferred o discouraged per ogni cerimonia — lo step di validazione applica la scelta.
OnWebAuthnAuthenticationOptionsRequest ti passa la richiesta in modo che tu restituisca i CredentialRecords corretti per la lista allowCredentials del login in corso. Lo storage lo progetti tu.
Fonti autorevoli per gli standard implementati da questo componente.
Una passkey è una credenziale WebAuthn discoverable conservata da Windows Hello, iCloud Keychain, Google Password Manager o una chiave di sicurezza. Il server supporta l'esperienza passkey completa mentre le credenziali restano nel tuo database.
Richiedi le opzioni di autenticazione senza un nome utente. Il browser elenca le passkey che possiede per il tuo sito, l'utente ne sceglie una e il server verifica lo userHandle restituito.
Con la conditional mediation le passkey compaiono nell'elenco di autofill del campo nome utente. Aggiungi autocomplete="username webauthn" e chiama startAuthentication(options, true) da /sgcWebAuthn.js.
Registra una passkey sul laptop e un'altra sul telefono. Tutte le passkey di un account condividono un unico user handle e le opzioni di autenticazione le elencano tutte.
BackupEligible e BackupState nel record di credenziale distinguono una passkey sincronizzata da una chiave di sicurezza legata al dispositivo, così puoi suggerire una seconda passkey agli utenti con un solo dispositivo.
Salva il record in OnWebAuthnRegistrationSuccessful, cerca la credenziale di un accesso senza nome utente o via autofill in OnWebAuthnAuthenticationGetCredential, e memorizza il nuovo counter in OnWebAuthnAuthenticationSuccessful.
Un counter di firma che non avanza viene rifiutato come possibile clone, così come un flag di backup eligibility che cambia tra un accesso e l'altro. Le passkey sincronizzate che riportano sempre 0 continuano a funzionare.
Leggi Passkey in Delphi: accesso senza password con WebAuthn e l'argomento della guida Passkeys.
Vai al riferimento del componente, scarica il progetto demo pronto all'uso e prova la versione trial.
| Guida online — TsgcWSAPIServer_WebAuthn Riferimento completo di proprietà, metodi ed eventi per questo componente. | Apri | |
| Progetto demo — Demos\20.HTTP_Protocol\12.WebAuthn Progetto di esempio pronto all'uso. Incluso nel pacchetto sgcWebSockets — scarica la versione di prova qui sotto. | Apri | |
| Documento tecnico (PDF) Funzionalità, guida rapida, esempi di codice per Delphi e C++ Builder e riferimenti alle fonti primarie — solo per questo componente. | Apri | |
| Manuale utente (PDF) Manuale completo che copre tutti i componenti della libreria. | Apri |