Fix critical bug causing users to be logged out during concurrent token refresh #826
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.



Summary & Motivation
Fix the token refresh race condition introduced in #821. When multiple API requests are made concurrently and all attempt to refresh an expired access token, only one succeeds while the others fail with
DbUpdateConcurrencyException, causing the user to be logged out. This commonly occurs when returning to a browser tab after tokens have expired (e.g., TanStack Query'sinvalidateQueries()triggers multiple parallel requests).PreviousRefreshTokenJtiCache=Shared), enabling isolated connections to access the same in-memory database. This allows the atomic refresh pattern usingActivator.CreateInstance(existingConnection.GetType())to work in testsRefreshTokenGeneratorAPI by consolidatingGenerateandUpdatemethods into a singleGeneratemethod with explicit version and expiry parametersUserInfoFactoryparameters to follow async conventions withcancellationTokenlastSessionRefreshedandAuthenticationTokensRefreshedtelemetry events as they add noise without providing meaningful business valueDownstream projects
Update the SQLite connection string in
your-self-contained-system/Tests/EndpointBaseTest.csto use shared cache mode, which allows isolated database connections to access the same in-memory database:Checklist