JWT Explicado do Jeito Certo: Autenticação Moderna com Spring Boot, React e APIs Seguras

JWT Explicado do Jeito Certo: Autenticação Moderna com Spring Boot, React e APIs Seguras

JWT Explicado do Jeito Certo. JWT virou padrão em APIs modernas. Mas a verdade é que muita aplicação usa JWT errado.

nexucodeplay08 de maio de 2026
Compartilhar:LinkedInXWhatsAppFacebook

JWT Explicado do Jeito Certo

JWT virou padrão em APIs modernas. Mas a verdade é que muita aplicação usa JWT errado.

Tem sistema:

  • sem refresh token

  • guardando token inseguro

  • sem expiração

  • vulnerável

  • impossível de escalar

E pior: muita gente copia tutorial do YouTube de 15 minutos e joga em produção.

Aí nasce o caos.

Neste artigo vamos entender JWT do jeito profissional.


O que é JWT?

JWT significa:

JSON Web Token

É um token compacto usado para:

  • autenticação

  • autorização

  • troca segura de informações

Exemplo:

eyJhbGciOiJIUzI1NiJ9...

O token possui 3 partes:

HEADER.PAYLOAD.SIGNATURE

Estrutura do JWT

Header

Define algoritmo:

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

Dados do usuário:

{
  "sub": "anderson@email.com",
  "role": "ADMIN",
  "exp": 1746699999
}

Nunca coloque:

  • senha

  • CPF

  • cartão

  • dados sensíveis

JWT NÃO é criptografado. Ele é apenas assinado.


Signature

Garante integridade:

HMACSHA256(
  base64UrlEncode(header) +
  "." +
  base64UrlEncode(payload),
  secret
)

Fluxo correto de autenticação

https://images.openai.com/static-rsc-4/1pgdhZJ0GTDIlBKs2c76zyHAyWjC9eRyLeuhm4JPl0JT_TPOKeG5wPZOk7ksMab-POqiZy8zylGDt9qa03We_zjtJsqW-aIWSPsyPmH5pBrDkOx8r2No72XeQbeYdGxKS8MV5tdFMQZxhnZoXqRz439QHtPkdmr0Tj4dMmicozzn-KlvUOkkELpGikYb8-S7?purpose=fullsize

https://images.openai.com/static-rsc-4/W1CjPXag9hW6uZubAg_7gvnBp7Mg_Vtut4swV79amdggJs368w9jniFqvHBWbcejrhbjujuvBqHatIJkafQXRToCn0uAVdRKdBrd-28xMr1AfM4JCml7YFD7l17KRZWK7zP1zzvNoVD-73Utm5oocIXoSdXHN3piJKOu3cNXzKTQrLZuNIAFmpKf64KZA6Jb?purpose=fullsize

https://images.openai.com/static-rsc-4/QhZ42Hds1HZxs3pBFqFvFtJFIKGG-X4-SHia0tlJFXHZMQ-5wn30TIMpC7YYvHa-CPgYH_8ebEtHf9UCwjfVt3C1Q274kCHlk36qvq3C6h-TpoQh82kQmhplVexaVrVv5TPU5DDWbkrQVapWiNluouzs8cVVi0o7JdxDskks7GUgVxD3aqvSnyUxCXsjp1si?purpose=fullsize

Fluxo profissional:

  1. Usuário faz login

  2. API valida credenciais

  3. API gera:

    • access token

    • refresh token

  4. Frontend salva token

  5. Requisições usam Bearer Token

  6. Access token expira

  7. Refresh token gera novo access token


Access Token vs Refresh Token

Access Token

Vida curta:

  • 5 min

  • 15 min

  • 30 min

Usado nas requisições.


Refresh Token

Vida longa:

  • 7 dias

  • 30 dias

Usado apenas para renovar sessão.


Por que isso importa?

Porque se roubarem:

  • access token → dano limitado

  • refresh token → precisa revogação

Segurança real vem daqui.


Implementação correta no Spring Boot

Dependências

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.5</version>
</dependency>

Gerando token

public String generateToken(UserDetails user) {

    Date now = new Date();

    Date expiration = new Date(
        now.getTime() + 1000 * 60 * 15
    );

    return Jwts.builder()
            .setSubject(user.getUsername())
            .claim("role", "ADMIN")
            .setIssuedAt(now)
            .setExpiration(expiration)
            .signWith(secretKey, SignatureAlgorithm.HS256)
            .compact();
}

Validando token

public boolean isValid(String token) {

    try {

        Jwts.parserBuilder()
            .setSigningKey(secretKey)
            .build()
            .parseClaimsJws(token);

        return true;

    } catch (Exception ex) {
        return false;
    }
}

Filter JWT no Spring Security

@Component
public class JwtAuthenticationFilter
        extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(
            HttpServletRequest request,
            HttpServletResponse response,
            FilterChain filterChain
    ) {

        String authHeader =
                request.getHeader("Authorization");

        if(authHeader == null ||
           !authHeader.startsWith("Bearer ")) {

            filterChain.doFilter(request, response);
            return;
        }

        String token =
                authHeader.substring(7);

        filterChain.doFilter(request, response);
    }
}

Onde salvar token no React?

ERRADO

localStorage

Por quê?

  • vulnerável a XSS


CERTO

  • httpOnly cookies OU

  • memória + refresh controlado


Erros clássicos com JWT

1. Token eterno

Isso é bomba relógio.


2. Não invalidar refresh token

Usuário faz logout. Token continua funcionando.

Perigo enorme.


3. Guardar informações sensíveis

JWT não é cofre.


4. Chave fraca

Esse erro é clássico:

WeakKeyException

Tamanho correto da chave

HS256: mínimo 256 bits.


JWT em microserviços

https://images.openai.com/static-rsc-4/OSiqvclp3eVcObo6bqGWASZtI4d4_OKehQyYL4l9YFnZBQr_rauWl4XlwQeEqWzg17MNLqjDKp-ZDkSOnB_UpwBHlusszyky1cW_8R_g8X4O3bphgf_D-xOHZ0ETT0_3oSHXIPpkU8KaB-7xVygU_XG4HrJuyakDYIQ7Ke5iseIKmqzI0JfJUhMAvge77X-Y?purpose=fullsize

https://images.openai.com/static-rsc-4/wpecnzh3hjZWMlYsRqsfUMTApZiFZMqNL48ictCb-ZjpgWGV4q2VDg2lvA4-Fw-6wyofbjznCScTClFlTxF4683mUGrgtvJBfdim1IZmvfeoVmDc7bvbIxgDt5v49Wk5G73TX_lzio5ywhDn93gTOpLXll5VaSUso7s-qfqc1QJNRDlTcd8GQifqKOIg-ONK?purpose=fullsize

https://images.openai.com/static-rsc-4/j2LQdO5GJJb7Xpz4rOOEJGR92GLf-aY09LagikHTyvwav-dnXNKS-Es-hk3HRs7Cw7yFtWO0JPT5PFpfBsJuUYQwAebp1z8MoxHWTdKyLMvSE3UizHdM-A-N66HeJ1ouPsQ2qQ164EhG40ETcwRriRpQiZl3d963J3-GTXBYw0LCIBdM13DDgLcD970tX19l?purpose=fullsize

Arquitetura comum:

  • Auth Service

  • API Gateway

  • Microservices validam token

Benefícios:

  • stateless

  • escalável

  • rápido


Quando NÃO usar JWT?

Nem tudo precisa JWT.

Exemplos:

  • sistemas internos simples

  • monolitos pequenos

  • aplicações server-side tradicionais

Às vezes session/cookie resolve melhor.

E tá tudo bem.


JWT vs Session

JWT

Session

Stateless

Stateful

Escalável

Mais simples

Melhor APIs

Melhor server-side

Complexo

Fácil

Muito usado em microserviços

Muito usado em monolitos


Conclusão

JWT é excelente.

Mas JWT mal implementado:

  • vira problema

  • vira vulnerabilidade

  • vira retrabalho

A implementação profissional precisa:

  • refresh token

  • expiração curta

  • revogação

  • storage seguro

  • filtros corretos

  • rotação de token

Autenticação não é detalhe. É fundação do sistema.

Publicidade

💬 Deixe seu comentário

Deixe um comentário

Comentários passam por moderação para evitar spam e manter a qualidade.

Comentários

Ainda não tem comentários.