Uma descoberta sobre JWT que simplificou meu frontend

autenticacao jwt

A diferença entre carregar várias camadas de autenticação manualmente e delegar isso a um mecanismo mais simples mostra como decisões de arquitetura podem transformar esforço constante em algo praticamente invisível no dia a dia.

Enquanto montava meu portfólio, acabei reimplementando um conceito que eu já tinha trabalhado em outros projetos, que é autenticação com JWT.

Da primeira vez que implementei, segui o caminho que eu mais via em exemplos: o backend retornava o token no login, eu armazenava no localStorage e depois adicionava o cabeçalho Authorization em todas as requisições protegidas.

Funcionava bem e eu entendia o fluxo completo, então eu nunca havia parado para procurar alternativas. Mas pesquisando outras formas de implementar autenticação, encontrei uma abordagem que eu ainda não tinha usado.

Em vez de retornar o JWT para o frontend gerenciar, o backend envia o token em um cookie através do cabeçalho Set-Cookie na resposta de login. A partir daí, o navegador automaticamente passa a enviar esse cookie em todas as requisições para aquele domínio. No frontend, a única configuração necessária foi habilitar o envio de credenciais nas requisições. No backend, foi apenas configurar o CORS corretamente e ler o token a partir dos cookies ao invés do header Authorization.

O que me chamou atenção não foi nem a discussão sobre segurança (que normalmente domina esse assunto), foi a simplificação do código. Não precisei mais salvar token, recuperar token, verificar expiração antes de chamadas específicas ou configurar interceptors para anexar Authorization em cada request. O fluxo HTTP continuou fazendo praticamente a mesma coisa: o servidor continua recebendo um identificador do usuário em cada requisição e validando o JWT normalmente. A diferença é que boa parte da mecânica passou a acontecer entre navegador e servidor, em vez de ficar espalhada pelo frontend.

Foi engraçado perceber isso porque eu tinha passado um tempo razoável organizando toda a lógica de token no frontend. Às vezes você não encontra uma solução melhor refinando a implementação atual, encontra quando para de assumir que ela precisava existir daquele jeito desde o começo.