Cliente OAuth para Node.js: implementação de autorização via Google e GitHub

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

Cliente OAuth para JavaScript (Node.js): guia completo

\n\n

OAuth (Open Authorization) é um protocolo aberto que permite conceder a um aplicativo de terceiros acesso limitado aos recursos do usuário sem transmitir seu login e senha. No mundo Node.js, a implementação de um cliente OAuth é uma das tarefas mais comuns ao criar aplicativos web modernos. Neste artigo, vamos detalhar como escrever seu próprio cliente OAuth para autorização via Google e GitHub, usando a biblioteca popular Passport.js.

\n\n

O que é OAuth 2.0 e para que serve?

\n

OAuth 2.0 é um padrão usado para delegar acesso. Em vez de armazenar as senhas dos usuários em seu servidor, você os redireciona para a página do provedor (Google, GitHub, Facebook), onde eles dão seu consentimento. Após isso, seu aplicativo recebe um access token (token de acesso), com o qual pode acessar a API do provedor em nome do usuário.

\n\n

Principais vantagens:

\n
    \n
  • Segurança — as senhas não são armazenadas em seu servidor.
  • \n
  • Conveniência para o usuário — não precisa se registrar novamente.
  • \n
  • Flexibilidade — você pode solicitar apenas os dados realmente necessários (scope).
  • \n
\n\n

Instalação dos pacotes necessários

\n

Para trabalhar com OAuth em Node.js, usaremos as seguintes bibliotecas:

\n
    \n
  • express — framework web
  • \n
  • passport — middleware para autenticação
  • \n
  • passport-google-oauth20 — estratégia para Google
  • \n
  • passport-github2 — estratégia para GitHub
  • \n
  • express-session — para armazenamento de sessões
  • \n
\n\n

Instale-os com um único comando:

\n
npm install express passport passport-google-oauth20 passport-github2 express-session
\n\n

Configuração básica do servidor

\n

Crie o arquivo app.js e importe todos os módulos necessários:

\n
const express = require('express');\nconst passport = require('passport');\nconst session = require('express-session');\nconst app = express();\n\n// Configuração de sessões\napp.use(session({\n    secret: 'your-secret-key',\n    resave: false,\n    saveUninitialized: true\n}));\n\napp.use(passport.initialize());\napp.use(passport.session());\n\n// Placeholder para serialização do usuário\npassport.serializeUser((user, done) => done(null, user));\npassport.deserializeUser((obj, done) => done(null, obj));\n\napp.listen(3000, () => console.log('Servidor iniciado na porta 3000'));
\n\n

Configuração da estratégia OAuth para Google

\n

Antes de começar, você precisa registrar o aplicativo no Google Cloud Console e obter o Client ID e o Client Secret. Defina nas configurações o redirect URI: http://localhost:3000/auth/google/callback.

\n\n
const GoogleStrategy = require('passport-google-oauth20').Strategy;\n\npassport.use(new GoogleStrategy({\n    clientID: 'SEU_GOOGLE_CLIENT_ID',\n    clientSecret: 'SEU_GOOGLE_CLIENT_SECRET',\n    callbackURL: 'http://localhost:3000/auth/google/callback'\n}, (accessToken, refreshToken, profile, done) => {\n    // Aqui você pode salvar o perfil no banco de dados\n    return done(null, profile);\n}));\n\n// Rotas para Google OAuth\napp.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));\n\napp.get('/auth/google/callback', \n    passport.authenticate('google', { failureRedirect: '/' }),\n    (req, res) => res.redirect('/profile')\n);
\n\n

Configuração da estratégia OAuth para GitHub

\n

Para o GitHub, registre um OAuth App em GitHub Developer Settings. Homepage URL: http://localhost:3000, Authorization callback UR

Recommendations