Persist passkey GUIDs during export/import (#773)

This commit is contained in:
Leendert de Borst
2026-03-10 13:23:08 +01:00
parent 98886d399e
commit cda22f8bdc
4 changed files with 15 additions and 4 deletions

View File

@@ -7,14 +7,14 @@
namespace AliasVault.ImportExport.Importers;
using System.Globalization;
using System.Text.RegularExpressions;
using AliasClientDb;
using AliasClientDb.Models;
using AliasVault.ImportExport.Models;
using AliasVault.TotpGenerator;
using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
using System.Text.RegularExpressions;
/// <summary>
/// Generic import logic.
@@ -259,9 +259,12 @@ public static class BaseImporter
{
foreach (var passkey in importedCredential.Passkeys)
{
// Use the GUID from the import if available, otherwise generate a new one
var passkeyId = passkey.Id ?? Guid.NewGuid();
item.Passkeys.Add(new Passkey
{
Id = Guid.NewGuid(),
Id = passkeyId,
RpId = passkey.RpId,
UserHandle = passkey.UserHandle ?? Array.Empty<byte>(),
PublicKey = passkey.PublicKey,

View File

@@ -13,7 +13,8 @@ namespace AliasVault.ImportExport.Models.Exports;
public class AvuxPasskey
{
/// <summary>
/// Gets or sets the passkey ID.
/// Gets or sets the passkey ID (GUID).
/// The WebAuthn credential ID is derived from this GUID at runtime using base64url encoding.
/// </summary>
public Guid Id { get; set; }

View File

@@ -12,6 +12,12 @@ namespace AliasVault.ImportExport.Models;
/// </summary>
public class ImportedPasskey
{
/// <summary>
/// Gets or sets the passkey ID (GUID from the original database record).
/// This is used to preserve the credential ID during import/export.
/// </summary>
public Guid? Id { get; set; }
/// <summary>
/// Gets or sets the relying party ID.
/// </summary>

View File

@@ -247,6 +247,7 @@ public static class VaultImportService
{
return new ImportedPasskey
{
Id = avuxPasskey.Id,
RpId = avuxPasskey.RpId,
UserHandle = !string.IsNullOrEmpty(avuxPasskey.UserHandle)
? Convert.FromBase64String(avuxPasskey.UserHandle)