TsgcWSAPIServer_WebAuthn › Eventos › OnWebAuthnAuthenticationGetCredential
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.
property OnWebAuthnAuthenticationGetCredential: TsgcWebAuthnOnAuthenticationGetCredential;
// TsgcWebAuthnOnAuthenticationGetCredential = procedure(Sender: TObject; const aCredentialId: String; const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean) of object
Não atribuído.
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.
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;