TsgcWSAPIServer_WebAuthn › Eventos › OnWebAuthnAuthenticationGetCredential

OnWebAuthnAuthenticationGetCredential Evento

Disparado durante a verificação de uma assertion quando a credencial usada pelo navegador não está na lista de credenciais da cerimônia (login sem nome de usuário e preenchimento automático de passkey); a aplicação retorna o registro da credencial a partir do seu próprio armazenamento.

Sintaxe

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

Valor Padrão

Não atribuído.

Observações

Quando o navegador responde a uma cerimônia de autenticação, o servidor procura a credencial nos registros de credenciais da cerimônia, os retornados por OnWebAuthnAuthenticationOptionsRequest ou encontrados na lista interna. Em um login sem nome de usuário ou com preenchimento automático de passkey, essa lista geralmente está vazia, então o servidor dispara este evento com o credential id enviado pelo navegador (aCredentialId, base64url).

Procure a credencial no seu armazenamento, preencha aCredentialRecord (por exemplo com ReadJSON e o JSON salvo de AsJSON em OnWebAuthnRegistrationSuccessful) e defina Found como true. O registro deve manter seu UserId (user handle), que é comparado com o userHandle da resposta. O login falha quando Found é false, quando o CredentialId do registro não é aCredentialId, ou quando a cerimônia foi iniciada com um nome de usuário e o Username do registro é diferente. Depois deste evento, a assertion é verificada com a chave pública do registro, como de costume.

Veja Passkeys para o padrão completo de armazenamento.

Exemplo

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;

Voltar para Eventos