目标是验证客户端返回数据的真实性和完整性,确保凭据绑定到预期用户,并安全地注册公钥凭据以供将来身份验证使用。
服务器必须按以下步骤验证客户端响应:
{
"id": "base64url-encoded credential ID",
"rawId": "base64url-encoded ID bytes",
"response": {
"clientDataJSON": "base64url",
"attestationObject": "base64url"
},
"type": "public-key"
}
如果客户端发送的响应有效,则调用 OnWebAuthnRegistrationSuccessful 事件,凭据记录可以安全地存储到数据库中以供未来登录验证使用。
procedure OnWebAuthnRegistrationSuccessful(Sender: TObject; const aRegistration: TsgcWebAuthn_Registration;
const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Accept: Boolean);
begin
// store in a db
DB.Credentials.Append;
DB.Credentials.FieldByName('Credentials').AsString := aCredentialRecord.AsJSON;
DB.Credentials.Post;
end;
如果在验证客户端响应时出现任何错误,则调用事件 OnWebAuthnRegistrationError,您可以在参数 aError 中获取错误原因。
procedure OnWebAuthnRegistrationError(Sender:
TObject; const aRequest: TsgcWebAuthn_RegistrationVerify_Request; const
aRegistration: TsgcWebAuthn_Registration; const aError: string);
begin
Log('#webauthn_registration_error: ' + aError);
end;