TsgcWSAPIServer_WebAuthn › Événements › OnWebAuthnAuthenticationGetCredential
Se déclenche pendant la vérification d'une assertion lorsque l'identifiant utilisé par le navigateur ne figure pas dans la liste des identifiants de la cérémonie (connexion sans nom d'utilisateur et autofill de passkey) ; l'application renvoie l'enregistrement de l'identifiant depuis son propre stockage.
property OnWebAuthnAuthenticationGetCredential: TsgcWebAuthnOnAuthenticationGetCredential;
// TsgcWebAuthnOnAuthenticationGetCredential = procedure(Sender: TObject; const aCredentialId: String; const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean) of object
Non assigné.
Lorsque le navigateur répond à une cérémonie d'authentification, le serveur recherche l'identifiant dans les enregistrements d'identifiants de la cérémonie, ceux renvoyés par OnWebAuthnAuthenticationOptionsRequest ou trouvés dans la liste interne. Dans une connexion sans nom d'utilisateur ou avec autofill de passkey, cette liste est généralement vide, le serveur déclenche donc cet événement avec l'id d'identifiant envoyé par le navigateur (aCredentialId, base64url).
Recherchez l'identifiant dans votre stockage, renseignez aCredentialRecord (par exemple avec ReadJSON et le JSON enregistré depuis AsJSON dans OnWebAuthnRegistrationSuccessful) et définissez Found sur true. L'enregistrement doit conserver son UserId (user handle), qui est comparé au userHandle de la réponse. La connexion échoue lorsque Found est false, lorsque le CredentialId de l'enregistrement n'est pas aCredentialId, ou lorsque la cérémonie a démarré avec un nom d'utilisateur et que le Username de l'enregistrement est différent. Après cet événement, l'assertion est vérifiée avec la clé publique de l'enregistrement comme d'habitude.
Voir Passkeys pour le modèle de stockage complet.
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;