WebAuthn-server voor Delphi
Voeg wachtwoordloze authenticatie op basis van passkeys toe aan je Delphi-server. WebAuthn Level 2 / FIDO2 registratie- en authenticatieprocedures, attestation-verificatie en hooks voor de opslag van credentials.
Voeg wachtwoordloze authenticatie op basis van passkeys toe aan je Delphi-server. WebAuthn Level 2 / FIDO2 registratie- en authenticatieprocedures, attestation-verificatie en hooks voor de opslag van credentials.
Implementeert de WebAuthn-relying-party-serverkant — maakt credential-challenges aan, verifieert navigator.credentials-responses, parseert attestation-statements en valideert assertion-handtekeningen.
TsgcWSAPIServer_WebAuthn
Windows, macOS, Linux, iOS, Android
Enterprise
Plaats een TsgcWSAPIServer_WebAuthn op een TsgcWebSocketHTTPServer, stel WebAuthnOptions.RelyingParty in, en handel vervolgens OnWebAuthnRegistrationSuccessful af om elke nieuwe passkey te bewaren en OnWebAuthnAuthenticationGetCredential om hem weer op te halen bij het aanmelden.
uses
sgcWebSocket, sgcWebSocket_Server_APIs, sgcWebAuthn_Classes;
// Server: TsgcWebSocketHTTPServer en WebAuthn: TsgcWSAPIServer_WebAuthn zijn form-velden
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
// bewaar de nieuwe passkey in je eigen 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
// aanmelden: haal de bewaarde passkey weer op
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;
Een relying-party-server die een Delphi-proces verandert in een passkey-bewust authenticatie-endpoint.
OnWebAuthnRegistrationOptionsRequest accepteert het verzoek om PublicKeyCredentialCreationOptions; de browser roept navigator.credentials.create() aan; de server valideert de attestation en OnWebAuthnRegistrationSuccessful geeft het nieuwe credential-record terug.
OnWebAuthnAuthenticationOptionsRequest vult PublicKeyCredentialRequestOptions met de eerder opgeslagen credential-records; de server valideert de assertion-handtekening met de opgeslagen publieke sleutel en genereert OnWebAuthnAuthenticationSuccessful.
Ondersteunt de attestation-statement-formaten none, packed, fido-u2f, tpm, android-key, android-safetynet en apple.
Houdt de signCount per credential bij om gekloonde authenticators te detecteren. Als de teller terugloopt, meldt OnWebAuthnAuthenticationError een fout waarop je kunt reageren.
UserVerification kan per ceremonie worden ingesteld op required, preferred of discouraged — de validatiestap dwingt de keuze af.
OnWebAuthnAuthenticationOptionsRequest geeft je het verzoek, zodat je de juiste CredentialRecords teruggeeft voor de allowCredentials-lijst van de lopende login. De opslag mag je zelf ontwerpen.
Gezaghebbende bronnen voor de standaarden die dit component implementeert.
Een passkey is een discoverable WebAuthn-credential die wordt bewaard door Windows Hello, iCloud Keychain, Google Password Manager of een security key. De server ondersteunt de volledige passkey-ervaring terwijl de credentials in je eigen database blijven.
Vraag de authenticatieopties op zonder gebruikersnaam. De browser toont de passkeys die hij voor je site heeft, de gebruiker kiest er één, en de server controleert de teruggegeven userHandle.
Met conditional mediation verschijnen de passkeys in de autofill-lijst van het gebruikersnaamveld. Voeg autocomplete="username webauthn" toe en roep startAuthentication(options, true) aan vanuit /sgcWebAuthn.js.
Registreer een passkey op de laptop en een andere op de telefoon. Alle passkeys van een account delen één user handle en de authenticatieopties vermelden ze allemaal.
BackupEligible en BackupState in het credential-record onderscheiden een gesynchroniseerde passkey van een aan het toestel gebonden security key, zodat je gebruikers met slechts één toestel een tweede passkey kunt voorstellen.
Bewaar het record in OnWebAuthnRegistrationSuccessful, zoek de credential van een aanmelding zonder gebruikersnaam of via autofill op in OnWebAuthnAuthenticationGetCredential, en bewaar de nieuwe teller in OnWebAuthnAuthenticationSuccessful.
Een handtekeningteller die niet vooruitgaat wordt geweigerd als mogelijke kloon, net als een backup-eligibility-vlag die verandert tussen aanmeldingen. Gesynchroniseerde passkeys die altijd 0 rapporteren blijven werken.
Lees Passkeys in Delphi: wachtwoordloos aanmelden met WebAuthn en het Passkeys-helponderwerp.
Diepe link naar de componentreferentie, pak het kant-en-klare demoproject en download de proefversie.
| Online help — TsgcWSAPIServer_WebAuthn Volledige property-, methode- en event-referentie voor dit component. | Openen | |
| Demoproject — Demos\20.HTTP_Protocol\12.WebAuthn Kant-en-klaar voorbeeldproject. Zit in het sgcWebSockets-pakket — download hieronder de proefversie. | Openen | |
| Technisch document (PDF) Functies, snelstart, codevoorbeelden voor Delphi en C++ Builder en primaire bronreferenties — alleen dit component. | Openen | |
| Gebruikershandleiding (PDF) Uitgebreide handleiding die elk component in de bibliotheek behandelt. | Openen |