Adicionar Autenticacao-e-Sessao

Rafael Alves Lopes 2026-05-29 15:36:50 -03:00
parent fea2611dea
commit 9972a4b864

@ -0,0 +1,89 @@
# 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
```text
LoginPage
-> useLogin()
-> loginWithAd()
-> POST /auth/login
-> storeAuthSession()
-> /home
```
O backend retorna:
```json
{
"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:
```text
/login#auth=<payload>
```
O fragmento nao e enviado ao servidor HTTP. O frontend:
1. le o `#auth`;
2. decodifica o payload;
3. salva a sessao;
4. limpa a URL;
5. navega para `/home`.
## Armazenamento da sessao
O frontend salva:
```text
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.
## Bearer token
O arquivo `src/shared/services/authFetch.js` instala um interceptador global de `fetch`.
Para chamadas feitas contra `VITE_API_URL`, ele adiciona:
```http
Authorization: Bearer <token>
```
## Logout
O logout chama `clearSession()`, removendo:
- `sessionStorage.authToken`;
- `sessionStorage.authUser`;
- valores antigos em `localStorage`, se existirem.