Cliente OAuth para JavaScript (Node.js): descripción general y ejemplos de uso

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

Descripción general de las bibliotecas de cliente OAuth para JavaScript (Node.js)



OAuth (Open Authorization) es un protocolo de autorización abierto que permite otorgar a un tercero acceso limitado a los recursos del usuario sin compartir nombre de usuario y contraseña. En el ecosistema de Node.js, existen varias bibliotecas maduras que implementan OAuth 2.0 y OAuth 1.0a. En este artículo, analizaremos las tres soluciones más populares: simple-oauth2, oauth4webapi y Passport.js con sus estrategias. Aprenderá cómo elegir la herramienta adecuada y cómo integrarla en su proyecto.



1. simple-oauth2 — Cliente OAuth 2.0 universal



simple-oauth2 es una biblioteca ligera que proporciona una API limpia para trabajar con OAuth 2.0. Soporta todos los tipos de concesión principales (authorization code, client credentials, password, refresh token). Es ideal para aplicaciones de servidor donde se necesita un control total sobre el proceso.



Instalación

npm install simple-oauth2


Ejemplo: autorización a través de GitHub

const express = require('express');const simpleOAuth2 = require('simple-oauth2');const app = express();

const config = { client: { id: 'SU_CLIENT_ID', secret: 'SU_CLIENT_SECRET' }, auth: { tokenHost: 'https://github.com', tokenPath: '/login/oauth/access_token', authorizePath: '/login/oauth/authorize' }};

const oauth2 = new simpleOAuth2.ClientCredentials(config);

// Ruta para iniciar la autorizaciónapp.get('/auth/github', (req, res) => { const authorizationUri = oauth2.authorizeURL({ redirect_uri: 'http://localhost:3000/callback', scope: 'user:email' }); res.redirect(authorizationUri);});

// Ruta de callbackapp.get('/callback', async (req, res) => { const { code } = req.query; try { const result = await oauth2.getToken({ code, redirect_uri: 'http://localhost:3000/callback' }); const accessToken = oauth2.createToken(result); console.log('Access Token:', accessToken.token.access_token); res.send('¡Autorización exitosa!'); } catch (error) { console.error('Error al obtener el token', error); res.status(500).send('Error de autorización'); }});

app.listen(3000, () => console.log('Servidor iniciado en el puerto 3000'));


2. oauth4webapi — Estándar moderno



oauth4webapi es una implementación de las últimas especificaciones de OAuth 2.0 y OpenID Connect. La biblioteca no tiene dependencias externas, soporta PKCE (Proof Key for Code Exchange) y trabajo con JWK (JSON Web Keys). Se recomienda para proyectos nuevos donde la seguridad y el cumplimiento de estándares son importantes.



Instalación

npm install oauth4webapi


Ejemplo: autorización con PKCE

const express = require('express');const { AuthorizationServer, Client, generateCodeVerifier, generateCodeChallenge } = require('oauth4webapi');const app = express();

// Configuración del servidor de autorización (Google)const issuer = new URL('https://accounts.google.com');const server = new AuthorizationServer(issuer);const client = new Client({ client_id: 'SU_CLIENT_ID', client_secret: 'SU_CLIENT_SECRET', redirect_uris: ['http://localhost:3000/callback']});

app.get('/auth/google', async (req, res) => { const codeVerifier = generateCodeVerifier(); const codeChallenge = await generateCodeChallenge(codeVerifier); // Guardamos codeVerifier en la sesión req.session.codeVerifier = codeVerifier;

const authorizationUrl = new URL(server.authorization_endpoint); authorizationUrl.searchParams.set('client_id', client.client_id); authorizationUrl.searchParams.set('redirect_uri', client.redirect_uris[0]); authorizationUrl.searchParams.set('response_type', 'code'); authorizationUrl.searchParams.set('scope', 'openid profile email'); auth

Recommendations