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

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
```html

Introdução ao OAuth 2.0 e autorização JWT em JavaScript

Aplicações web modernas exigem um sistema robusto de autenticação e autorização. Dois dos padrões mais populares — OAuth 2.0 (protocolo de delegação de acesso) e JWT (JSON Web Tokens) — são frequentemente usados juntos para criar APIs seguras. Neste artigo, vamos detalhar como implementar autorização OAuth 2.0 e JWT em JavaScript (Node.js) do zero.

Você aprenderá:

  • O que é OAuth 2.0 e por que ele é necessário
  • Como funcionam os tokens JWT
  • Como configurar um servidor de autorização no Express
  • Como proteger rotas usando middleware

Fundamentos do OAuth 2.0: fluxos e papéis

O OAuth 2.0 define quatro papéis: Resource Owner (usuário), Client (aplicação), Authorization Server (servidor que emite tokens) e Resource Server (servidor que fornece dados). O fluxo mais comum é o Authorization Code Grant, usado em aplicações web.

Neste artigo, focaremos na implementação de um Resource Server e Authorization Server usando JWT, em vez de provedores externos (Google, GitHub). Isso lhe dará controle total sobre o processo.

Instalação de dependências

Para começar, crie um novo projeto Node.js e instale os pacotes necessários:

npm init -y
npm install express jsonwebtoken bcrypt dotenv cors

Descrição dos pacotes:

  • express — framework para criar o servidor
  • jsonwebtoken — criação e verificação de JWT
  • bcrypt — hash de senhas
  • dotenv — trabalho com variáveis de ambiente
  • cors — configuração de CORS para a API

Implementação de autorização JWT em Node.js

JWT é um token compacto composto por três partes: cabeçalho, payload (carga útil) e assinatura. Vamos usá-lo para autenticar usuários após um login bem-sucedido.

Configuração do servidor e modelo de usuário

Crie o arquivo server.js e defina a estrutura básica:

require('dotenv').config();
const express = require('express');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcrypt');
const cors = require('cors');

const app = express();
app.use(express.json());
app.use(cors());

const PORT = process.env.PORT || 3000;
const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';

// Armazenamento temporário de usuários (em produção, use um banco de dados)
const users = [];

Registro e hash de senhas

No registro, a senha deve ser transformada em hash usando bcrypt:

app.post('/api/register', async (req, res) => {
    try {
        const { email, password } = req.body;
        
        // Verificar se o usuário já existe
        const existingUser = users.find(u => u.email === email);
        if (existingUser) {
            return res.status(400).json({ message: 'Usuário já existe' });
        }

        // Hash da senha
        const hashedPassword = await bcrypt.hash(password, 10);
        const newUser = { id: users.length + 1, email, password: hashedPassword };
        users.push(newUser);

        res.status(201).json({ message: 'Usuário criado' });
    } catch (error) {
        res.status(500).json({ message: 'Erro do servidor' });
    }
});

Login e geração do token JWT

Após verificar as credenciais, geramos o token usando jsonwebtoken:

app.post('/api/login', async (req, res) => {
    try {
        const { email, password } = req.body;
        
        // Buscar usuário
        const user = users.find(u => u.email === email);
        if (!user) {
```                

Blogs

Book Recommendations