TsgcWSAPIServer_WebAuthn › 事件 › OnWebAuthnAuthenticationGetCredential

OnWebAuthnAuthenticationGetCredential 事件

在验证断言期间,当浏览器使用的凭据不在此次仪式的凭据列表中时触发(无用户名登录和通行密钥自动填充);应用程序会从自己的存储中返回该凭据记录。

语法

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

默认值

未赋值。

备注

当浏览器响应身份验证仪式时,服务器会在该仪式的凭据记录中查找该凭据,即由 OnWebAuthnAuthenticationOptionsRequest 返回或在内部列表中找到的记录。在无用户名登录或使用通行密钥自动填充时,该列表通常为空,因此服务器会触发此事件,并附带浏览器发送的凭据 ID(aCredentialId,base64url)。

在您的存储中查找该凭据,填充 aCredentialRecord(例如使用 ReadJSON,以及从 AsJSON 保存并位于 OnWebAuthnRegistrationSuccessful 中的 JSON),并将 Found 设置为 true。该记录必须保留其 UserId(用户句柄),它会与响应的 userHandle 进行比较。当 Found 为 false,或记录的 CredentialId 不是 aCredentialId,或该仪式是以用户名开始的且记录的 Username 不同时,登录会失败。此事件之后,断言会照常使用该记录的公钥进行验证。

完整的存储模式请参见 Passkeys。

示例

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;

返回事件