TsgcWSAPIServer_WebAuthn › イベント › 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;