diff --git a/apps/server/Utilities/AliasVault.ImportExport/Importers/BaseImporter.cs b/apps/server/Utilities/AliasVault.ImportExport/Importers/BaseImporter.cs
index 29f5e45a1..d09ab9aca 100644
--- a/apps/server/Utilities/AliasVault.ImportExport/Importers/BaseImporter.cs
+++ b/apps/server/Utilities/AliasVault.ImportExport/Importers/BaseImporter.cs
@@ -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;
///
/// 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(),
PublicKey = passkey.PublicKey,
diff --git a/apps/server/Utilities/AliasVault.ImportExport/Models/Exports/AvuxPasskey.cs b/apps/server/Utilities/AliasVault.ImportExport/Models/Exports/AvuxPasskey.cs
index 194238af5..304e488be 100644
--- a/apps/server/Utilities/AliasVault.ImportExport/Models/Exports/AvuxPasskey.cs
+++ b/apps/server/Utilities/AliasVault.ImportExport/Models/Exports/AvuxPasskey.cs
@@ -13,7 +13,8 @@ namespace AliasVault.ImportExport.Models.Exports;
public class AvuxPasskey
{
///
- /// 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.
///
public Guid Id { get; set; }
diff --git a/apps/server/Utilities/AliasVault.ImportExport/Models/ImportedPasskey.cs b/apps/server/Utilities/AliasVault.ImportExport/Models/ImportedPasskey.cs
index 1ce193819..1f0a2a735 100644
--- a/apps/server/Utilities/AliasVault.ImportExport/Models/ImportedPasskey.cs
+++ b/apps/server/Utilities/AliasVault.ImportExport/Models/ImportedPasskey.cs
@@ -12,6 +12,12 @@ namespace AliasVault.ImportExport.Models;
///
public class ImportedPasskey
{
+ ///
+ /// Gets or sets the passkey ID (GUID from the original database record).
+ /// This is used to preserve the credential ID during import/export.
+ ///
+ public Guid? Id { get; set; }
+
///
/// Gets or sets the relying party ID.
///
diff --git a/apps/server/Utilities/AliasVault.ImportExport/VaultImportService.cs b/apps/server/Utilities/AliasVault.ImportExport/VaultImportService.cs
index eef9f1b76..ef33029dd 100644
--- a/apps/server/Utilities/AliasVault.ImportExport/VaultImportService.cs
+++ b/apps/server/Utilities/AliasVault.ImportExport/VaultImportService.cs
@@ -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)