Skip to content

Feat/auth refresh rotation - #13

Open
Ruan-Moraes wants to merge 26 commits into
mainfrom
feat/auth-refresh-rotation
Open

Feat/auth refresh rotation#13
Ruan-Moraes wants to merge 26 commits into
mainfrom
feat/auth-refresh-rotation

Conversation

@Ruan-Moraes

Copy link
Copy Markdown
Owner

No description provided.

Ruan and others added 23 commits July 10, 2026 06:31
…rt e adapter

Tabela refresh_tokens guarda só o SHA-256 hex do JWT, com family_id
para rotação com detecção de reuso (OAuth BCP).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…Expiration

Cada login/cadastro abre uma família nova de rotação; a expiração
persistida vem do próprio JWT (sem duplicar config).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…a reuso

Antes um access token válido renovava tokens; agora só JWT type=refresh
presente e ativo na tabela. Reuso de token rotacionado revoga a família
(sessão) inteira — mitigação de replay/roubo.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
POST /api/auth/logout revoga a família (sessão) no servidor. Refresh e
logout aceitam cookie httpOnly (web, precedência) ou body (mobile).
Cookie: HttpOnly + SameSite=Strict + Path=/api/auth + Secure via
app.auth.cookie-secure (false em dev http, true em prod).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…efresh tokens

Bucket próprio de 10/min por IP nos endpoints de credencial; job diário
remove tokens expirados há mais de 1 dia (revogados recentes ficam para
a janela de detecção de reuso).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…localStorage

Access token só em memória; refresh via cookie httpOnly (withCredentials).
401 dispara um único POST /refresh (single-flight) e repete as requests;
falha limpa a sessão e emite authExpired (pub/sub, padrão do mobile).
Corrige AUTH_STORAGE_KEY duplicada no interceptor.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ntexto

signOut chama POST /api/auth/logout (revogação server-side); AuthProvider
expõe isInitializing e assina authExpired (toast i18n 'sessão expirou');
AuthGuard/RoleGuard leem o contexto — nada de localStorage direto — e
seguram render até a sessão resolver (sem flash de conteúdo protegido).
Chave auth:sessionExpired em pt-BR/en-US/es-ES.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…racionais (DT-59)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
manga-reader Error Error Aug 1, 2026 6:56pm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant