From fa366cf2e6d6cfc82ee710f1b187bd83a775713c Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Tue, 18 Nov 2025 21:31:15 +0100 Subject: [PATCH] Refactor (#1347) --- .../browser-extension/src/entrypoints/popup/App.tsx | 2 +- .../AliasVault.Api/Controllers/AuthController.cs | 13 ++++++++++++- apps/server/AliasVault.Api/Helpers/AuthHelper.cs | 7 +++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/browser-extension/src/entrypoints/popup/App.tsx b/apps/browser-extension/src/entrypoints/popup/App.tsx index c4663f181..1cdd55547 100644 --- a/apps/browser-extension/src/entrypoints/popup/App.tsx +++ b/apps/browser-extension/src/entrypoints/popup/App.tsx @@ -135,7 +135,7 @@ const AppContent: React.FC<{ }} > {message && ( -
+

{message}

)} diff --git a/apps/server/AliasVault.Api/Controllers/AuthController.cs b/apps/server/AliasVault.Api/Controllers/AuthController.cs index 51243c096..72b283640 100644 --- a/apps/server/AliasVault.Api/Controllers/AuthController.cs +++ b/apps/server/AliasVault.Api/Controllers/AuthController.cs @@ -56,6 +56,17 @@ public class AuthController(IAliasServerDbContextFactory dbContextFactory, UserM /// private const int MobileLoginTimeoutMinutes = 3; + /// + /// Access token validity in minutes. + /// + /// + /// This is the time period for which the access token is valid. + /// It is used to authenticate the user for a limited time + /// and is short-lived by design. With the separate refresh token, the user can request a new access token + /// when this access token expires. + /// + private const int AccessTokenValiditySeconds = 600; + /// /// Semaphore to prevent concurrent access to the database when generating new tokens for a user. /// @@ -969,7 +980,7 @@ public class AuthController(IAliasServerDbContextFactory dbContextFactory, UserM issuer: configuration["Jwt:Issuer"] ?? string.Empty, audience: configuration["Jwt:Issuer"] ?? string.Empty, claims: claims, - expires: timeProvider.UtcNow.AddMinutes(10), + expires: timeProvider.UtcNow.AddSeconds(AccessTokenValiditySeconds), signingCredentials: credentials); return new JwtSecurityTokenHandler().WriteToken(token); diff --git a/apps/server/AliasVault.Api/Helpers/AuthHelper.cs b/apps/server/AliasVault.Api/Helpers/AuthHelper.cs index 5d770dde4..180e6da3b 100644 --- a/apps/server/AliasVault.Api/Helpers/AuthHelper.cs +++ b/apps/server/AliasVault.Api/Helpers/AuthHelper.cs @@ -91,9 +91,12 @@ public static class AuthHelper { var userAgent = request.Headers.UserAgent.ToString(); var acceptLanguage = request.Headers.AcceptLanguage.ToString(); - var client = request.Headers["X-AliasVault-Client"].ToString(); - var rawIdentifier = $"{client}|{userAgent}|{acceptLanguage}"; + // Client header is usually formatted like "[client name]-[version]" e.g. "chrome-0.25.0", take only "chrome" + var clientHeader = request.Headers["X-AliasVault-Client"].ToString(); + var clientName = clientHeader?.Split('-')[0] ?? "unknown"; + + var rawIdentifier = $"{clientName}|{userAgent}|{acceptLanguage}"; return rawIdentifier; } }