Cliente OAuth para JavaScript (Node.js): guia completo
\n\nOAuth (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\nO que é OAuth 2.0 e para que serve?
\nOAuth 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\nPrincipais 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
Instalação dos pacotes necessários
\nPara 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
Instale-os com um único comando:
\nnpm install express passport passport-google-oauth20 passport-github2 express-session\n\nConfiguração básica do servidor
\nCrie o arquivo app.js e importe todos os módulos necessários:
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\nConfiguração da estratégia OAuth para Google
\nAntes 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.
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\nConfiguração da estratégia OAuth para GitHub
\nPara o GitHub, registre um OAuth App em GitHub Developer Settings. Homepage URL: http://localhost:3000, Authorization callback UR
Também na biblioteca
Criterion para Rust: guia completo com exemplos práticos
Autorização e Autenticação em JavaScript (Node.js): Guia Completo
range-v3 para C++: guia completo com exemplos
Tokens JWT em C# (.NET): trabalhando com System.IdentityModel.Tokens.Jwt
Configuração de aplicações TypeScript: bibliotecas e abordagens