OAuth 2.0 e autorização JWT em JavaScript: guia completo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao OAuth 2.0 e JWT: o que é e para que serve?

\n

As aplicações web modernas raramente funcionam sem um sistema de autorização. Seja para login via Google, acesso a API ou proteção de rotas na sua aplicação Node.js — você precisará de OAuth 2.0 e JWT (JSON Web Tokens). Essas tecnologias se tornaram o padrão de facto para a troca segura de dados entre cliente e servidor.

\n

Neste artigo, vamos entender como funcionam OAuth 2.0 e JWT, e criar um sistema simples de autorização em JavaScript (Node.js). O material é voltado para desenvolvedores iniciantes, então vamos da teoria à prática com exemplos detalhados de código.

\n\n

Parte 1: O que é OAuth 2.0 e como funciona?

\n

OAuth 2.0 é um protocolo de autorização que permite que aplicações obtenham acesso limitado aos recursos do usuário sem compartilhar a senha. Imagine que você queira entrar em um site usando sua conta do Google. O OAuth 2.0 é justamente o responsável por esse processo.

\n

Papéis principais no OAuth 2.0

\n
    \n
  • Resource Owner — o usuário proprietário dos dados.
  • \n
  • Client — sua aplicação (por exemplo, servidor Node.js).
  • \n
  • Authorization Server — servidor que emite tokens (ex.: Google, GitHub).
  • \n
  • Resource Server — servidor que armazena os dados do usuário.
  • \n
\n

Fluxo típico do OAuth 2.0 (Authorization Code Grant)

\n
    \n
  1. O usuário clica em "Entrar com Google".
  2. \n
  3. A aplicação o redireciona para o servidor de autorização do Google.
  4. \n
  5. O usuário dá o consentimento.
  6. \n
  7. O Google retorna um authorization code para o servidor da aplicação.
  8. \n
  9. O servidor troca esse código por um access token.
  10. \n
  11. O servidor usa o access token para acessar os dados do usuário.
  12. \n
\n

Na prática, para aplicações simples, costuma-se usar JWT como formato do token de acesso.

\n\n

Parte 2: JWT — estrutura e princípio de funcionamento

\n

JWT (JSON Web Token) é uma forma compacta e autossuficiente de transmitir informações entre partes na forma de um objeto JSON. O token é assinado, portanto pode ser verificado sem consultar um banco de dados.

\n

Estrutura do JWT

\n

O JWT consiste em três partes separadas por pontos (.):

\n
header.payload.signature
\n
    \n
  • Header — contém o tipo do token e o algoritmo de assinatura (ex.: HS256).
  • \n
  • Payload — dados (claims), como ID do usuário, função, tempo de vida.
  • \n
  • Signature — assinatura criada com uma chave secreta.
  • \n
\n

Exemplo de JWT decodificado

\n
{\n  "alg": "HS256",\n  "typ": "JWT"\n}\n.\n{\n  "sub": "1234567890",\n  "name": "John Doe",\n  "iat": 1516239022,\n  "exp": 1516242622\n}\n.\n[signature]
\n

Importante: o payload não é criptografado, apenas assinado. Nunca armazene dados confidenciais (senhas) no JWT!

\n\n

Parte 3: Implementação da autorização JWT em Node.js

\n

Agora vamos à prática. Criaremos uma API REST simples com Express.js e autorização JWT. Para isso, precisaremos das bibliotecas jsonwebtoken e bcryptjs.

\n

Passo 1: Instalação das dependências

\n
npm init -y\nnpm install express jsonwebtoken bcryptjs dotenv\nnpm install --save-dev nodemon
\n

Passo 2: Configuração básica do servidor

\n
// server.js\nrequire('dotenv').config();\nconst express = require('express');\nconst jwt = require('jsonwebtoken');\nconst bcrypt = require('bcryptjs');\n\nconst app = express();\napp.use(express.json());\n\nconst users = []; // Em um projeto real — banco de dados\n\nconst PORT = process.env.PORT || 3000;\nconst JWT_SECRET = process.env.JWT_SECRET || 'mysecretkey123';\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});

                
                

Blogs

Book Recommendations