Cliente OAuth para JavaScript (Node.js): guía completa
\n\nOAuth (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?
\nOAuth 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\nPrincipales 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
Instalación de los paquetes necesarios
\nPara 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
Instálelos con un solo comando:
\nnpm install express passport passport-google-oauth20 passport-github2 express-session\n\nConfiguración básica del servidor
\nCreemos un archivo app.js e importemos todos los módulos necesarios:
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\nConfiguración de la estrategia OAuth para Google
\nAntes 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.
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\nConfiguración de la estrategia OAuth para GitHub
\nPara GitHub, registre una OAuth App en GitHub Developer Settings. Homepage URL: http://localhost:3000, Authorization callback UR
También en la biblioteca
Validación de datos en Swift (iOS/macOS): mejores prácticas y herramientas
Trabajo con YAML en Rust: biblioteca serde_yaml
Bibliotecas WebSocket de Rust: tokio-tungstenite y async-tungstenite
Configuración de aplicaciones PHP: bibliotecas y herramientas para gestionar ajustes