TsgcWSAPIServer_WebAuthn › Eventos › OnWebAuthnAuthenticationGetCredential

OnWebAuthnAuthenticationGetCredential Evento

Se dispara al verificar una assertion cuando la credencial usada por el navegador no está en la lista de credenciales de la ceremonia (inicio de sesión sin nombre de usuario y autofill de passkey); la aplicación devuelve el registro de la credencial desde su propio almacenamiento.

Sintaxis

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

Valor Predeterminado

No asignado.

Observaciones

Cuando el navegador responde a una ceremonia de autenticación, el servidor busca la credencial en los registros de credenciales de la ceremonia, los devueltos por OnWebAuthnAuthenticationOptionsRequest o encontrados en la lista interna. En un inicio de sesión sin nombre de usuario o con autofill de passkey, esa lista suele estar vacía, así que el servidor dispara este evento con el credential id enviado por el navegador (aCredentialId, base64url).

Busque la credencial en su almacenamiento, rellene aCredentialRecord (por ejemplo con ReadJSON y el JSON guardado de AsJSON en OnWebAuthnRegistrationSuccessful) y establezca Found en true. El registro debe conservar su UserId (user handle), que se compara con el userHandle de la respuesta. El inicio de sesión falla cuando Found es false, cuando el CredentialId del registro no es aCredentialId, o cuando la ceremonia se inició con un nombre de usuario y el Username del registro es distinto. Después de este evento, la assertion se verifica con la clave pública del registro como de costumbre.

Consulte Passkeys para el patrón de almacenamiento completo.

Ejemplo

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;

Volver a Eventos