🚀 Capítulo 17: Missão Impossível: JWT (Tema: Missão Impossível)

NOTE

Este capítulo utiliza a temática de Missão Impossível para explicar a autenticação via JWT no Spring Boot. Proteja as rotas da sua API com mensagens criptografadas!


1. 🎯 Objetivo da Aula

Compreender como funciona a autenticação e autorização em APIs usando o framework Spring Security e como gerar e validar tokens JWT (JSON Web Token).

2. 🏢 O Cenário Prático (Seu Desafio)

Nos filmes da série Missão Impossível, o agente secreto Ethan Hunt recebe suas ordens através de mensagens gravadas que contêm os dados da missão e provam que ele é um agente legítimo da organização. Ninguém mais consegue falsificar ou ler essas mensagens porque elas usam um código secreto que só a agência conhece!

No mundo das APIs reais, nós não podemos deixar rotas como /deletar-conta abertas para qualquer pessoa na internet acessar.

  • Nós usamos o Spring Security para colocar guardas nas portas das nossas rotas.
  • E usamos o JWT como a mensagem secreta: um texto longo e criptografado que o servidor gera quando o usuário digita a senha correta. O usuário guarda esse token e o envia de volta para provar quem ele é! Seu desafio é proteger os segredos!

🧠 Fundamentos: A Teoria Traduzida

🛡️ 1. O que é o Spring Security?

É o framework padrão do ecossistema Spring focado em fornecer autenticação (saber quem você é) e autorização (saber o que você pode fazer) para as aplicações Java.

🔄 2. O Fluxo do JWT no Spring:

  1. O usuário envia login e senha.
  2. O Spring Security verifica. Se estiver correto, ele usa uma biblioteca (como a auth0 java-jwt) para criar um token assinado com uma chave secreta.
  3. O usuário recebe esse token e o guarda no aplicativo.
  4. Sempre que o usuário for acessar uma rota protegida, o Spring Security intercepta a chamada, lê o token do cabeçalho da requisição e verifica se a assinatura é válida. Se for, ele deixa passar!

4. 📖 Exemplo Guiado: O Guarda das Rotas

Veja como configurar o Spring Security para exigir autenticação em algumas rotas e deixar outras públicas:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
 
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
            .csrf().disable() // Desabilita proteção contra CSRF (padrão para APIs)
            .authorizeHttpRequests()
                .requestMatchers(HttpMethod.POST, "/login").permitAll() // Rota pública!
                .anyRequest().authenticated() // Todas as outras rotas exigem token!
            .and()
            .build();
    }
}

5. 🛠️ Prática Obrigatória 1: O papel do Spring Security

Com base no texto:

  1. Qual é a função principal do framework Spring Security em um projeto Java? Cite as duas coisas que ele faz (começam com a letra A).

6. 🛠️ Prática Obrigatória 2: Rotas Públicas

  1. No exemplo guiado acima, qual foi a única rota que deixamos pública (que qualquer um pode acessar sem precisar de token)? Por que essa rota precisa ser pública?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 17 Java_MissaoImpossivel) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

spec_backend_com_java_e_springboot/
├── capitulos/
│   └── capitulo_17_missao_impossivel.md

💡 Checkpoint de Lógica

Os tokens JWT costumam ter uma data de expiração (ex: valem por horas). Isso serve para que, caso um hacker consiga roubar o token do usuário, ele não consiga acessar a conta para sempre!

10. 🔥 Desafio de Fixação

Pesquise o que significa o termo Stateless no contexto do Spring Security e por que ele é usado em APIs REST.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Ele cuida da segurança do sistema. As duas funções são: Autenticação (verificar a identidade do usuário, saber quem ele é) e Autorização (verificar as permissões do usuário, saber o que ele pode fazer). Gabarito da Prática 2:
  2. Foi a rota POST /login. Ela precisa ser pública porque é justamente através dela que o usuário vai enviar a sua senha para receber o token! Se ela fosse trancada, o usuário nunca conseguiria fazer o primeiro acesso!

Capitulo Anterior | Proximo Capitulo