📊 Capítulo 10: Autenticação Stateless com JWT
Especialização Backend com Java 21 & Spring Boot 3
🗺️ O Ciclo de Autenticação JWT Stateless
sequenceDiagram
autonumber
actor C as Cliente / Frontend
participant F as JwtAuthenticationFilter
participant S as TokenService
participant SEC as SecurityContextHolder
participant API as Controller Protegido
C->>F: Requisição HTTP com Header "Authorization: Bearer <Token>"
F->>S: validarTokenEExtrairSubject(token)
alt Token Válido & Não Expirado
S-->>F: Retorna "usuario@empresa.com" e Roles
F->>SEC: Define UsernamePasswordAuthenticationToken no Contexto
F->>API: Prossegue para o Controller
API-->>C: Retorna HTTP 200 OK com Dados Protegidos
else Token Inválido / Expirado
F-->>C: Retorna HTTP 401 Unauthorized
end
🎯 Slide 1: Estrutura Canônica do JSON Web Token (JWT)
-
Header: Algoritmo de assinatura e tipo (
{"alg": "HS256", "typ": "JWT"}). -
Payload (Claims): Dados de identidade e tempo (
sub,iss,iat,exp,roles). - Signature: Assinatura digital criptográfica (
HMACSHA256(Base64(Header) + "." + Base64(Payload), Secret)).
🎯 Slide 2: Implementando o OncePerRequestFilter
@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String token = extrairToken(request);
if (token != null && tokenService.isTokenValido(token)) {
UserDetails user = userDetailsService.loadUserByUsername(tokenService.getSubject(token));
var auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
}
filterChain.doFilter(request, response);
}
}
🎯 Slide 3: Boas Práticas Estritas com JWT
-
Expiração Curta: Access Tokens com validade de 15 a 60 minutos.
-
Refresh Tokens: Armazenados em cookies
HttpOnlycom rotação periódica. - Stateless Real: O servidor não guarda sessão na memória nem consulta o banco em cada requisição.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim