🚀 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 (JSON Web Token). Proteja as rotas da sua API com chaves que provam a identidade do usuário!


1. 🎯 Objetivo da Aula

Compreender o que é um JWT (JSON Web Token), como funciona o fluxo de autenticação stateless em APIs e como gerar e validar tokens em Go.

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 sempre terminam com a frase: “Essa mensagem se autodestruirá em 5 segundos”. Essas mensagens provam que ele é um agente legítimo da organização e contêm os dados da missão. Ninguém mais consegue falsificar essas mensagens!

No mundo das APIs reais, nós não podemos deixar rotas como /deletar-conta ou /ver-perfil abertas para qualquer pessoa na internet acessar. Nós precisamos de segurança!

  • E para isso, nós usamos o JWT (JSON Web Token)!
  • Ele funciona como a mensagem secreta do Ethan Hunt: é um texto longo, criptografado e seguro que o servidor gera quando o usuário digita a senha correta. O usuário guarda esse token e o envia de volta para a API em cada requisição para provar quem ele é! Seu desafio é proteger os segredos!

🧠 Fundamentos: A Teoria Traduzida

🎫 1. O que é um JWT?

É um padrão de mercado (RFC 7519) para transmitir informações de forma segura entre as partes como um objeto JSON. Ele é composto por três partes separadas por pontos (.):

  1. Header (Cabeçalho): Diz qual algoritmo de criptografia foi usado.
  2. Payload (Carga de Dados): Onde guardamos os dados do usuário (Ex: ID do usuário e data de expiração do token).
  3. Signature (Assinatura): A parte que garante que ninguém alterou o token no meio do caminho!

🔄 2. O Fluxo da Autenticação:

  1. O usuário envia usuário e senha para a rota /login.
  2. O servidor verifica no banco de dados. Se estiver correto, o servidor cria um JWT (usando uma chave secreta que só o servidor sabe) e devolve para o usuário.
  3. O aplicativo do usuário guarda esse token.
  4. Sempre que o usuário quiser acessar uma rota protegida (ex: /meu-perfil), ele envia o token no cabeçalho (Header) da requisição.
  5. O servidor lê o token, verifica a assinatura e, se estiver tudo certo, libera o acesso!

4. 📖 Exemplo Guiado: A Cara de um JWT

Um token JWT real se parece com uma sopa de letrinhas gigante assim: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

  • Parte vermelha: Header.
  • Parte roxa: Payload.
  • Parte azul: Assinatura digital.

5. 🛠️ Prática Obrigatória 1: As três partes

Com base no texto:

  1. Quais são as três partes que compõem a estrutura de um token JWT?

6. 🛠️ Prática Obrigatória 2: A Segurança

  1. Imagine que um hacker conseguiu interceptar o JWT de um usuário e tentou alterar o ID do usuário dentro do Payload para tentar acessar a conta de outra pessoa. Por que essa tentativa de fraude vai falhar quando o token chegar no servidor em Go? O que protege o token de alterações?

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 Go_MissaoImpossivel) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

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

💡 Checkpoint de Lógica

Para trabalhar com JWT em Go, a comunidade costuma usar a biblioteca golang-jwt/jwt, que já possui todas as funções para criar e validar as assinaturas automaticamente!

10. 🔥 Desafio de Fixação

Pesquise o que significa o termo Stateless (Sem estado) e por que as APIs modernas preferem usar JWT em vez de Sessions (Sessões) salvas na memória do servidor.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Header, Payload e Signature (Assinatura). Gabarito da Prática 2:
  2. Porque o hacker não possui a Chave Secreta do servidor! Quando ele altera qualquer caractere do Payload, a Assinatura do token deixa de ser válida. O servidor vai recalcular a assinatura usando a chave secreta e verá que o resultado não bate com a assinatura enviada pelo hacker, rejeitando o acesso na hora!

Capitulo Anterior | Proximo Capitulo