Implemented a nonce for refresh tokens

This adds a nonce to the refresh token such that each request to obtain a refresh token must now also provide a matching nonce.

When using non-persisted logins, the request to the server is the same, but the "remember me" flag toggles a shorter duration for the refresh token.

The FE can then store the nonce in either local storage for persisted logins or in session storage for non-persisted logins.

The default is currently to always issue refresh tokens with a nonce, but this can be toggled with the JWT configuration.

The ngax client does not have the non-persisted login so it stores the nonce in local storage, using a name that is compatible with ngclient so the user can swap between them without needing to re-login.

The server util was updated to also store the nonce.

This fixes #6451
This commit is contained in:
Kenneth Skovhede
2025-08-07 23:10:54 +02:00
parent a5c8dce21c
commit e3f1aefec2
18 changed files with 276 additions and 128 deletions
+1 -1
View File
@@ -93,7 +93,7 @@ class Program
// Refresh token (if using refresh tokens)
try
{
var refreshResult = await client.RefreshTokenV1Async(CancellationToken.None);
var refreshResult = await client.RefreshTokenV1Async(null, CancellationToken.None);
Console.WriteLine($"✓ Token refreshed: {refreshResult.AccessToken[..10]}...");
}
catch (Exception ex)