Aceito Data: 2026-03-09
O sistema e composto por microservicos independentes que precisam validar a identidade do usuario sem depender de um servico central a cada requisicao. A autenticacao precisa ser stateless do ponto de vista dos MSs consumidores (Property, Reservas, etc.), enquanto o MS de Users/Auth centraliza a emissao e revogacao de tokens.
Forcas envolvidas:
Biblioteca ja presente no projeto. Gerencia autenticacao via sessoes armazenadas em cookies assinados.
Vantagens
Desvantagens
Servicos dedicados de identity management.
Vantagens
Desvantagens
Implementar o fluxo de autenticacao diretamente no MS de Auth usando jose para assinatura/verificacao JWT e Argon2 para hash de senhas.
Vantagens
jose ja esta instalada no projetoDesvantagens
Implementar autenticacao manualmente, removendo better-auth do projeto. Bibliotecas base: jose para assinatura/verificacao JWT e @node-rs/argon2 para hash de senhas (binding nativo, mais performatico que a versao JS pura). As decisoes tecnicas sao:
| Aspecto | Access Token | Refresh Token |
|---|---|---|
| Formato | JWT (header.payload.signature) | Opaco (string aleatoria, nao JWT) |
| Assinatura | RS256 (chave assimetrica) | N/A (validado por lookup no Redis) |
| Duracao | 10 minutos | 30 dias |
| Armazenamento (servidor) | Nenhum (stateless) | Redis do MS de Auth |
| Armazenamento (cliente) | localStorage ou memoria | Cookie httpOnly |
| Enviado em | Header Authorization: Bearer <token> | Cookie automatico (apenas rota de refresh) |
O MS de Auth assina JWTs com chave privada RSA. Os outros MSs buscam a chave publica via endpoint JWKS (/.well-known/jwks.json) e validam localmente. Nenhum MS alem do Auth consegue emitir tokens.
Campos alinhados com AuthenticatedUser usado nos MSs consumidores (id, name, email, role).
A cada uso do refresh token:
Resultado: sessao infinita enquanto o usuario estiver ativo. Se ficar 30 dias sem usar o app, precisa fazer login novamente.
Deteccao de roubo: se um refresh token ja utilizado for apresentado novamente, todos os tokens do usuario sao revogados.
Argon2id via @node-rs/argon2 — binding nativo (Rust → Node via NAPI) mais performatico que implementacoes JS puras. Variante id combina resistencia a ataques side-channel (Argon2i) e GPU (Argon2d).
Set-Cookie: refresh_token=<token>;
HttpOnly;
Secure;
SameSite=Strict;
Path=/api/v1/auth/refresh;
Max-Age=2592000{
"sub": "<user-id>",
"name": "<user-name>",
"email": "<user-email>",
"role": "GUEST | HOST | ADMIN",
"iat": 1741500000,
"exp": 1741500600
}