Introdução ao OAuth 2.0 e JWT: o que é e para que serve?
\nAs 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.
\nNeste 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\nParte 1: O que é OAuth 2.0 e como funciona?
\nOAuth 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.
\nPapé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
Fluxo típico do OAuth 2.0 (Authorization Code Grant)
\n- \n
- O usuário clica em "Entrar com Google". \n
- A aplicação o redireciona para o servidor de autorização do Google. \n
- O usuário dá o consentimento. \n
- O Google retorna um
authorization codepara o servidor da aplicação. \n - O servidor troca esse código por um
access token. \n - O servidor usa o access token para acessar os dados do usuário. \n
Na prática, para aplicações simples, costuma-se usar JWT como formato do token de acesso.
\n\nParte 2: JWT — estrutura e princípio de funcionamento
\nJWT (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.
\nEstrutura do JWT
\nO JWT consiste em três partes separadas por pontos (.):
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
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]\nImportante: o payload não é criptografado, apenas assinado. Nunca armazene dados confidenciais (senhas) no JWT!
\n\nParte 3: Implementação da autorização JWT em Node.js
\nAgora vamos à prática. Criaremos uma API REST simples com Express.js e autorização JWT. Para isso, precisaremos das bibliotecas jsonwebtoken e bcryptjs.
Passo 1: Instalação das dependências
\nnpm init -y\nnpm install express jsonwebtoken bcryptjs dotenv\nnpm install --save-dev nodemon\nPasso 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});