fix(auth): access token de 15min para 8h

Usuário pediu explicitamente pelo menos 8h. O TTL curto original era
deliberado (ADR-0003, reduzir janela de token vazado), mas o frontend
nunca implementou refresh silencioso — na prática o usuário era
derrubado no meio do trabalho sem nenhuma renovação automática. 8h é
um paliativo real, documentado como tal num adendo na própria ADR-0003
(com a mitigação que já existe — revogação de sessão continua granular
— e o que resolveria isso de verdade sem abrir mão de segurança:
refresh silencioso no frontend).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-18 14:47:12 -03:00
parent 205d83a5f5
commit 9e629bb394
3 changed files with 48 additions and 2 deletions

View File

@@ -9,7 +9,16 @@ export interface AccessTokenPayload {
app: "core" | "reseller" | "subscriber";
}
const ACCESS_TOKEN_TTL_SECONDS = 15 * 60; // 15 min — ADR-0003
/**
* 8h — revisado a partir dos 15min originais da ADR-0003 (ver o adendo no
* próprio documento): o frontend não implementa refresh silencioso ainda
* (`AuthContext.tsx`, `session.ts` — "No refresh-token rotation in this
* leva"), então um access token de 15min derrubava o usuário no meio do
* trabalho. 8h cobre um expediente inteiro sem exigir login de novo;
* revogação continua granular via a tabela `sessions` (logout/"encerrar
* todas as sessões" não dependem da expiração do JWT).
*/
const ACCESS_TOKEN_TTL_SECONDS = 8 * 60 * 60;
const REFRESH_TOKEN_TTL_DAYS = 30;
const MFA_CHALLENGE_TTL_SECONDS = 2 * 60;
const MFA_CHALLENGE_PURPOSE = "mfa_challenge" as const;