TsgcWSAPIServer_WebAuthn › Zdarzenia › OnWebAuthnAuthenticationGetCredential

OnWebAuthnAuthenticationGetCredential Zdarzenie

Wywoływane podczas weryfikacji asercji, gdy poświadczenie użyte przez przeglądarkę nie znajduje się na liście poświadczeń ceremonii (logowanie bez nazwy użytkownika i autouzupełnianie kluczem dostępu); aplikacja zwraca rekord poświadczenia z własnego magazynu.

Składnia

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

Wartość domyślna

Nieprzypisane.

Uwagi

Gdy przeglądarka odpowiada na ceremonię uwierzytelniania, serwer szuka poświadczenia w rekordach poświadczeń ceremonii, tych zwróconych przez OnWebAuthnAuthenticationOptionsRequest lub znalezionych na wewnętrznej liście. Przy logowaniu bez nazwy użytkownika lub z autouzupełnianiem kluczem dostępu ta lista jest zwykle pusta, więc serwer wywołuje to zdarzenie z identyfikatorem poświadczenia wysłanym przez przeglądarkę (aCredentialId, base64url).

Wyszukaj poświadczenie w swoim magazynie, wypełnij aCredentialRecord (na przykład za pomocą ReadJSON i JSON zapisanego z AsJSON w OnWebAuthnRegistrationSuccessful) i ustaw Found na true. Rekord musi zachować swój UserId (uchwyt użytkownika), który jest porównywany z userHandle odpowiedzi. Logowanie kończy się niepowodzeniem, gdy Found ma wartość false, gdy CredentialId rekordu nie jest równe aCredentialId, lub gdy ceremonia została rozpoczęta z nazwą użytkownika, a Username rekordu jest inne. Po tym zdarzeniu asercja jest weryfikowana kluczem publicznym rekordu jak zwykle.

Zobacz Passkeys, aby poznać kompletny wzorzec przechowywania.

Przykład

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;

Powrót do Zdarzeń