TsgcWSAPIServer_WebAuthn › Eventi › OnWebAuthnAuthenticationGetCredential

OnWebAuthnAuthenticationGetCredential Evento

Si attiva durante la verifica di un'asserzione quando la credenziale usata dal browser non è nell'elenco delle credenziali della ceremony (accesso senza nome utente e autofill delle passkey); l'applicazione restituisce il record della credenziale dal proprio storage.

Sintassi

property OnWebAuthnAuthenticationGetCredential: TsgcWebAuthnOnAuthenticationGetCredential;
// TsgcWebAuthnOnAuthenticationGetCredential = procedure(Sender: TObject; const aCredentialId: String; const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean) of object

Valore predefinito

Non assegnato.

Note

Quando il browser risponde a una ceremony di autenticazione, il server cerca la credenziale nei record di credenziali della ceremony, quelli restituiti da OnWebAuthnAuthenticationOptionsRequest o trovati nell'elenco interno. In un accesso senza nome utente o con autofill delle passkey, quell'elenco è di solito vuoto, quindi il server attiva questo evento con l'id della credenziale inviato dal browser (aCredentialId, base64url).

Cercare la credenziale nel proprio storage, compilare aCredentialRecord (per esempio con ReadJSON e il JSON salvato da AsJSON in OnWebAuthnRegistrationSuccessful) e impostare Found a true. Il record deve mantenere il proprio UserId (user handle), che viene confrontato con il userHandle della risposta. L'accesso fallisce quando Found è false, quando CredentialId del record non è aCredentialId, oppure quando la ceremony è stata avviata con un nome utente e Username del record è diverso. Dopo questo evento l'assertion viene verificata con la chiave pubblica del record come di consueto.

Vedere Passkeys per il pattern di storage completo.

Esempio

procedure TForm1.sgcWSAPIServer_WebAuthn1WebAuthnAuthenticationGetCredential(
  Sender: TObject; const aCredentialId: String;
  const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean);
var
  vJSON: string;
begin
  Found := DBFindPasskey(aCredentialId, vJSON);
  if Found then
    aCredentialRecord.ReadJSON(vJSON);
end;

Torna agli Eventi