Skip to content

Commit a69e34d

Browse files
committed
Fix token refresh race condition causing login loop
- Wait for ongoing refresh before sending new requests - Add proactive refresh when token is about to expire - Prevents multiple requests from hitting server with stale tokens
1 parent 00bf6c8 commit a69e34d

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

cloud/src/LrmCloud.Web/Services/AuthenticatedHttpHandler.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
3232

3333
if (!isAuthEndpoint)
3434
{
35+
// Wait if a refresh is in progress before adding auth header
36+
// This prevents sending requests with stale tokens during refresh
37+
var coordinator = _serviceProvider.GetService<TokenRefreshCoordinator>();
38+
if (coordinator?.IsRefreshInProgress == true)
39+
{
40+
await coordinator.WaitForRefreshAsync(TimeSpan.FromSeconds(10), cancellationToken);
41+
}
42+
43+
// Proactive refresh: if token is expired or about to expire, refresh before sending
44+
if (await _tokenStorage.IsTokenExpiredAsync() && await _tokenStorage.CanRefreshAsync())
45+
{
46+
await TryRefreshTokenAsync();
47+
}
48+
3549
await AddAuthHeaderAsync(request);
3650
}
3751

0 commit comments

Comments
 (0)