Autenticacao e Sessao
Visao geral
O frontend autentica o usuario pelo backend e mantem a sessao no navegador usando sessionStorage.
Fluxos suportados:
- login LDAP/AD por usuario e senha;
- login Microsoft OAuth;
- sessao com JWT proprio da aplicacao.
Login LDAP/AD
LoginPage
-> useLogin()
-> loginWithAd()
-> POST /auth/login
-> storeAuthSession()
-> /home
O backend retorna:
{
"token": "jwt",
"user": {
"id": "1",
"name": "Usuario",
"username": "usuario",
"perfis": ["Admin"],
"areas": ["Suporte"],
"accessStatus": "assigned"
}
}
Login Microsoft
O backend redireciona para o frontend com o payload no fragmento da URL:
/login#auth=<payload>
O fragmento nao e enviado ao servidor HTTP. O frontend:
- le o
#auth; - decodifica o payload;
- salva a sessao;
- limpa a URL;
- navega para
/home.
Armazenamento da sessao
O frontend salva:
sessionStorage.authToken
sessionStorage.authUser
Nao usa mais localStorage para token ou usuario.
Motivo:
- a sessao nao fica persistida apos fechar o navegador;
- reduz risco de reaproveitar sessao antiga;
- evita mocks locais antigos de perfil.
Validade do JWT
Antes de considerar o usuario autenticado, o frontend decodifica o payload do JWT e valida o campo exp.
Se o token estiver ausente, invalido ou expirado:
authTokeneauthUsersao removidos;- a rota protegida redireciona para
/login; - chamadas API que retornam
401tambem limpam a sessao.
Bearer token
O arquivo src/shared/services/authFetch.js instala um interceptador global de fetch.
Para chamadas feitas contra VITE_API_URL, ele adiciona:
Authorization: Bearer <token>
Se o backend responder 401, o interceptador limpa a sessao e envia o usuario para /login.
Logout
O logout chama clearSession(), removendo:
sessionStorage.authToken;sessionStorage.authUser;- valores antigos em
localStorage, se existirem.