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

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.

2 min de leitura
218 views
08 de maio de 2026
Compartilhe
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.

nexucodeplay
Autor do artigo

nexucodeplay

Desenvolvedor Fullstack

Especialista em Java, Spring Boot, React, Flutter e arquitetura moderna de software.

Perguntas frequentes

Dúvidas comuns sobre o tema

JWT (JSON Web Token) é um padrão de autenticação utilizado para transmitir informações seguras entre cliente e servidor através de tokens assinados digitalmente. Ele é amplamente utilizado em APIs REST, aplicações SPA, microserviços e sistemas modernos que precisam de autenticação stateless.

Publicidade

Apoie o projeto acessando nossos parceiros.

Publicidade
Compartilhe

Curtiu esse conteúdo?

Compartilhe este artigo com outros desenvolvedores e ajude mais pessoas a evoluírem na carreira.

Continue estudando

Artigos relacionados

Conteúdos profissionais sobre arquitetura, backend moderno, frontend e performance.

Deixe seu comentário

Compartilhe sua opinião sobre este conteúdo.

Deixe um comentário

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

Comentários

I
ITCODE TECH SYSTEMS LTDA
18 de maio de 2026

O Jwt e realmente importante poder utilizar da forma correta.

❤️ 0