Cliente OAuth para Node.js: implementación de autorización a través de Google y GitHub

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente OAuth para JavaScript (Node.js): guía completa

\n\n

OAuth (Open Authorization) es un protocolo abierto que permite otorgar a una aplicación de terceros acceso limitado a los recursos de un usuario sin transferir su nombre de usuario y contraseña. En el mundo de Node.js, implementar un cliente OAuth es una de las tareas más comunes al crear aplicaciones web modernas. En este artículo, analizaremos en detalle cómo escribir su propio cliente OAuth para la autorización a través de Google y GitHub, utilizando la popular biblioteca Passport.js.

\n\n

¿Qué es OAuth 2.0 y para qué sirve?

\n

OAuth 2.0 es un estándar utilizado para delegar el acceso. En lugar de almacenar las contraseñas de los usuarios en su servidor, los redirige a la página del proveedor (Google, GitHub, Facebook), donde dan su consentimiento. Después de eso, su aplicación recibe un access token (token de acceso), con el cual puede acceder a la API del proveedor en nombre del usuario.

\n\n

Principales ventajas:

\n
    \n
  • Seguridad — las contraseñas no se almacenan en su servidor.
  • \n
  • Comodidad para el usuario — no es necesario registrarse de nuevo.
  • \n
  • Flexibilidad — se pueden solicitar solo los datos que realmente se necesitan (scope).
  • \n
\n\n

Instalación de los paquetes necesarios

\n

Para trabajar con OAuth en Node.js utilizaremos las siguientes bibliotecas:

\n
    \n
  • express — framework web
  • \n
  • passport — middleware para autenticación
  • \n
  • passport-google-oauth20 — estrategia para Google
  • \n
  • passport-github2 — estrategia para GitHub
  • \n
  • express-session — para almacenar sesiones
  • \n
\n\n

Instálelos con un solo comando:

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

Configuración básica del servidor

\n

Creemos un archivo app.js e importemos todos los módulos necesarios:

\n
const express = require('express');\nconst passport = require('passport');\nconst session = require('express-session');\nconst app = express();\n\n// Configuración de sesiones\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 la serialización del usuario\npassport.serializeUser((user, done) => done(null, user));\npassport.deserializeUser((obj, done) => done(null, obj));\n\napp.listen(3000, () => console.log('Servidor iniciado en el puerto 3000'));
\n\n

Configuración de la estrategia OAuth para Google

\n

Antes de comenzar, debe registrar su aplicación en Google Cloud Console y obtener un Client ID y un Client Secret. Especifique en la configuración la URI de redirección: http://localhost:3000/auth/google/callback.

\n\n
const GoogleStrategy = require('passport-google-oauth20').Strategy;\n\npassport.use(new GoogleStrategy({\n    clientID: 'TU_GOOGLE_CLIENT_ID',\n    clientSecret: 'TU_GOOGLE_CLIENT_SECRET',\n    callbackURL: 'http://localhost:3000/auth/google/callback'\n}, (accessToken, refreshToken, profile, done) => {\n    // Aquí puede guardar el perfil en la base de datos\n    return done(null, profile);\n}));\n\n// Rutas 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

Configuración de la estrategia OAuth para GitHub

\n

Para GitHub, registre una OAuth App en GitHub Developer Settings. Homepage URL: http://localhost:3000, Authorization callback UR

Recommendations