Corrige un contournement : après réinitialisation de la base (même JWT_SECRET_KEY), un jeton restait cryptographiquement valide et donnait accès alors que le compte n'existait plus, permettant d'atteindre l'onboarding sans s'inscrire. - Backend : JwtBearer.OnTokenValidated vérifie désormais l'existence du compte référencé par le claim sub (lu sous 'sub' ou NameIdentifier selon le remapping) et rejette le jeton (401) si le compte est introuvable. - Backend : nouvel endpoint protégé GET /api/auth/moi (SessionController) renvoyant 200 si la session est réellement valide, 401 sinon. - Frontend : authGuard valide la session côté serveur (GET /auth/moi) au lieu de se fier au seul jeton local ; sur échec, redirection vers /login (jeton purgé par l'intercepteur sur 401). AuthService.validerSession() ajouté. Tests backend : 54/54 au vert.
27 lines
955 B
C#
27 lines
955 B
C#
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace SchotzIadKmTracker.Api.Controllers;
|
|
|
|
/// <summary>
|
|
/// Endpoint de validation de session. Ce controller est soumis à l'autorisation globale
|
|
/// (RequireAuthenticatedUser) : il n'est atteignable qu'avec un jeton valide ET un compte
|
|
/// existant (le middleware JWT rejette un jeton dont le compte est introuvable via
|
|
/// OnTokenValidated). Le frontend l'appelle pour confirmer qu'une session est réellement
|
|
/// valide au chargement des routes protégées.
|
|
/// </summary>
|
|
[ApiController]
|
|
[Route("api/auth")]
|
|
public class SessionController : ControllerBase
|
|
{
|
|
/// <summary>
|
|
/// Retourne 200 si la session est valide (jeton valide + compte existant), 401 sinon.
|
|
/// </summary>
|
|
[HttpGet("moi")]
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
|
public IActionResult Moi()
|
|
{
|
|
return Ok(new { authentifie = true });
|
|
}
|
|
}
|