No dinâmico universo do desenvolvimento de software, a autenticação emerge como um pilar fundamental para qualquer aplicação robusta. Recentemente, a solução 'Better Auth' tem gerado bastante burburinho no ecossistema TypeScript, prometendo uma experiência de desenvolvimento (DX) superior: é tipada, extensível e surpreendentemente fácil de configurar.
Contudo, há um detalhe crucial: 'Better Auth' é projetada para rodar em ambientes de execução JavaScript, como Node.js, Bun ou Deno. Mas e se a sua lógica de backend reside em um ecossistema diferente, como Go com o framework Fiber, e você ainda deseja aproveitar a eficácia do 'Better Auth' para seu frontend TanStack Start?
Desafio: Integrando Autenticação Node.js com Backends em Go
Esta é uma questão comum em arquiteturas de microsserviços ou sistemas que adotam múltiplas linguagens. A boa notícia é que existe uma solução elegante para esse cenário. Neste artigo, vamos explorar como arquitetar um "Padrão Proxy" utilizando TanStack Start para gerenciar a autenticação em Node.js, enquanto passamos contextos de autorização de forma segura para um backend Go Fiber.
A Arquitetura de Proxy com JWT
Visto que o 'Better Auth' não pode ser executado diretamente em Go, a estratégia envolve executá-lo dentro do nosso servidor TanStack Start (que opera em Node.js/Bun). Em seguida, utilizaremos uma Estratégia JWT (JSON Web Token) para estabelecer a comunicação segura com o backend em Go.
O Fluxo de Comunicação
TanStack Start gerencia o login/cadastro e emite um Cookie de Sessão.
As requisições do cliente chegam a uma rota específica no TanStack Start (por exemplo,
/api/externa).TanStack Start atua como um proxy: ele descriptografa o cookie, recupera um JWT e encaminha a requisição para o backend Go.
Go Fiber valida o JWT e serve o recurso solicitado, garantindo que apenas usuários autorizados acessem os dados.
Detalhes Técnicos: Segurança e Dados
A segurança é primordial ao lidar com dados de autenticação e acesso a recursos. A utilização de JWTs assinados digitalmente garante a integridade e a autenticidade das informações entre os serviços. A correta validação do token no backend Go é essencial para evitar acessos não autorizados e manter a robustez do sistema, especialmente quando se trata de acesso a dados sensíveis, um tema que abordamos em profundidade em nosso artigo sobre Segurança de PII em Data Lakes com AWS Lake Formation.
Passo 1: Configurando o Better Auth (Frontend)
O primeiro passo é habilitar o plugin JWT no 'Better Auth'. Isso é crucial porque os cookies de sessão padrão são opacos para o backend Go. Precisamos de um token que o Go possa verificar criptograficamente.
// lib/auth.tsimport { betterAuth } from "better-auth";import { drizzleAdapter } from "better-auth/adapters/drizzle</span><span class="dl">"</span><span class="p">;</span>
<span class="k">import</span> {</span> jwt</span> } from</span> "</span>better-auth/plugins</span>><span class="dl">"</span>>;</span>
<span class="k">export</span>> const</span>> auth</span>> =</span>> betterAuth</span>>({</span>>
advanced</span>>:</span>> {</span>>
cookiePrefix</span>>:</span>> "</span>>your-app</span>>"</span>>,</span>> // Custom prefix for cookies</span>>
},</span>>
baseURL</span>>:</span>> process</span>>.env</span>>.VITE_BETTER_AUTH_URL</span>> ||</span>> "</span>>http://localhost:3000</span>>"</span>>,</span>>
database</span>>:</span>> drizzleAdapter</span>>(</span>>db,</span>> {</span>>
provider</span>>:</span>> "</span>>pg</span>>"</span>>,</span>>
}),</span>>
});Ao habilitar o plugin jwt, o 'Better Auth' passa a emitir um JWT que pode ser facilmente consumido e verificado por um backend em Go. Isso "fecha a lacuna" e permite a comunicação segura entre os dois ecossistemas, aproveitando o melhor de cada um. Fique ligado para a próxima parte deste guia, onde abordaremos a implementação no lado do Go Fiber e os detalhes da verificação do JWT!