BUG: Appels API du circuit Blazor non authentifiés après F5/reload — 302 en boucle, refresh live mort #45

Closed
opened 2026-08-11 11:39:29 +02:00 by nonobis · 1 comment
Owner

Contexte

Après un rechargement de page (F5) ou un nouvel onglet, si le sessionStorage navigateur est vide (ex: navigateur redémarré, cookie 7j encore valide), HeimdallAuthStateProvider.GetAuthenticationStateAsync retombe sur le chemin cookie → AuthState.LoginFromPrincipal met AccessToken = null (aucun JWT disponible).

Observé (logs prod docker-heimdall-1)

À chaque cycle d'auto-refresh (15 s) de la page Agents :

Start processing HTTP request GET /api/agents
Redirect to login: /api/agents -> /login        ← requête circuit SANS auth (302)
Start processing HTTP request GET /api/agents
Validating principal for /api/agents            ← requête suivante OK (cookie SSR)

Toutes les requêtes du circuit (HttpContext null → pas de cookie propagé, AccessToken null → pas de Bearer) partent sans aucune authentification → 302 systématique → échec silencieux → l'auto-refresh des métriques ne fonctionne jamais après un reload.

Attendu

  • Les appels API émis par le circuit Blazor doivent être authentifiés, même sans JWT en sessionStorage
  • L'auto-refresh des métriques agents doit fonctionner après F5/reload

Correctif

  • Capturer la valeur du cookie .Heimdall.Auth lors de la restauration SSR (HttpContext présent) et la stocker dans AuthState
  • SameOriginHttpMessageHandler : propager ce cookie sur les requêtes du circuit (HttpContext null) quand aucun Bearer n'est présent
  • Le Bearer JWT (sessionStorage) reste prioritaire quand il existe

Critères d'acceptation

  • Plus de « Redirect to login » en boucle dans les logs pour les appels API du circuit
  • Auto-refresh des métriques fonctionnel après F5
  • Tests HeimdallAuthStateProvider existants verts (adaptés si besoin)
  • make test vert
## Contexte Après un rechargement de page (F5) ou un nouvel onglet, si le sessionStorage navigateur est vide (ex: navigateur redémarré, cookie 7j encore valide), `HeimdallAuthStateProvider.GetAuthenticationStateAsync` retombe sur le chemin cookie → `AuthState.LoginFromPrincipal` met **`AccessToken = null`** (aucun JWT disponible). ## Observé (logs prod docker-heimdall-1) À chaque cycle d'auto-refresh (15 s) de la page Agents : ``` Start processing HTTP request GET /api/agents Redirect to login: /api/agents -> /login ← requête circuit SANS auth (302) Start processing HTTP request GET /api/agents Validating principal for /api/agents ← requête suivante OK (cookie SSR) ``` Toutes les requêtes du circuit (HttpContext null → pas de cookie propagé, AccessToken null → pas de Bearer) partent **sans aucune authentification** → 302 systématique → échec silencieux → l'auto-refresh des métriques ne fonctionne jamais après un reload. ## Attendu - Les appels API émis par le circuit Blazor doivent être authentifiés, même sans JWT en sessionStorage - L'auto-refresh des métriques agents doit fonctionner après F5/reload ## Correctif - Capturer la valeur du cookie `.Heimdall.Auth` lors de la restauration SSR (HttpContext présent) et la stocker dans `AuthState` - `SameOriginHttpMessageHandler` : propager ce cookie sur les requêtes du circuit (HttpContext null) quand aucun Bearer n'est présent - Le Bearer JWT (sessionStorage) reste prioritaire quand il existe ## Critères d'acceptation - Plus de « Redirect to login » en boucle dans les logs pour les appels API du circuit - Auto-refresh des métriques fonctionnel après F5 - Tests HeimdallAuthStateProvider existants verts (adaptés si besoin) - make test vert
Author
Owner

Corrigé par 37e2fe4. AuthState.AuthCookie capturé lors de la restauration SSR (LoginFromPrincipal) et propagé par SameOriginHttpMessageHandler sur les requêtes du circuit (HttpContext null, pas de Bearer) → plus de 302 en boucle sur les auto-refresh après F5. Purge du cookie au login/logout. Tests : SameOriginHttpMessageHandlerTests + AuthStateTests.

Corrigé par 37e2fe4. AuthState.AuthCookie capturé lors de la restauration SSR (LoginFromPrincipal) et propagé par SameOriginHttpMessageHandler sur les requêtes du circuit (HttpContext null, pas de Bearer) → plus de 302 en boucle sur les auto-refresh après F5. Purge du cookie au login/logout. Tests : SameOriginHttpMessageHandlerTests + AuthStateTests.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#45
No description provided.