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: por que OAuth 2.0 e JWT são o padrão da autorização moderna



No desenvolvimento web moderno, a autenticação e autorização seguras de usuários são uma das tarefas principais. Os dois protocolos e formatos mais populares que resolvem essa tarefa são OAuth 2.0 e JWT (JSON Web Token). Apesar de serem frequentemente usados juntos, são coisas diferentes: OAuth 2.0 é um protocolo de delegação de acesso, enquanto JWT é um formato de token.



Neste artigo, vamos analisar como funciona o OAuth 2.0, o que é JWT e como implementá-los em JavaScript (Node.js). O material é voltado para desenvolvedores iniciantes, então vamos progredir da teoria à prática com exemplos de código claros.



O que é OAuth 2.0 e como funciona



OAuth 2.0 (Open Authorization) é um protocolo que permite que um aplicativo obtenha acesso limitado aos recursos de um usuário sem transmitir seu login e senha. Imagine que você queira entrar em um site pelo Google ou GitHub — isso é OAuth 2.0.



Papéis principais no OAuth 2.0

  • Resource Owner — usuário proprietário dos dados
  • Client — aplicativo que solicita acesso
  • Authorization Server — servidor que emite tokens (ex.: Google)
  • Resource Server — servidor que armazena os dados do usuário


Fluxo Authorization Code Grant (exemplo com Node.js)

O fluxo OAuth 2.0 mais comum e seguro é o Authorization Code Grant. Vamos analisar sua implementação usando Express.js.



// Instalação de dependências// npm install express axios dotenv

// .envCLIENT_ID=your_client_idCLIENT_SECRET=your_client_secretREDIRECT_URI=http://localhost:3000/callback


const express = require('express');const axios = require('axios');require('dotenv').config();

const app = express();

// Passo 1: Redirecionar o usuário para a página de autorizaçãoapp.get('/auth', (req, res) => { const authUrl = `https://provider.com/oauth/authorize?client_id=${process.env.CLIENT_ID}&redirect_uri=${process.env.REDIRECT_URI}&response_type=code&scope=email`; res.redirect(authUrl);});

// Passo 2: Processar o callback com o authorization codeapp.get('/callback', async (req, res) => { const { code } = req.query;

try { // Trocar o authorization code por um access token const tokenResponse = await axios.post('https://provider.com/oauth/token', { client_id: process.env.CLIENT_ID, client_secret: process.env.CLIENT_SECRET, code, redirect_uri: process.env.REDIRECT_URI, grant_type: 'authorization_code' });

const { access_token, refresh_token } = tokenResponse.data; // Salvar os tokens (em um projeto real, no banco de dados) req.session.accessToken = access_token; req.session.refreshToken = refresh_token;

res.send('Autorização bem-sucedida!'); } catch (error) { res.status(500).send('Erro de autorização'); }});

app.listen(3000, () => console.log('Servidor rodando na porta 3000'));


JWT (JSON Web Token): estrutura e criação



JWT é uma forma compacta e autossuficiente de transmitir informações entre partes na forma de um objeto JSON. O token consiste em três partes separadas por pontos:



  • Header — tipo de token e algoritmo de assinatura (ex.: HS256)
  • Payload — dados (claims) que queremos transmitir
  • Signature — assinatura que garante a integridade dos dados


Criação de JWT em Node.js

Para trabalhar com JWT, usaremos a biblioteca jsonwebtoken.



// npm install jsonwebtoken

const jwt = require('jsonwebtoken');

const secretKey = 'seu_segredo

Blogs

Book Recommendations