Este tutorial de Passport.js te guiará a través de los pasos para configurar una estrategia de autenticación Node.js local utilizando Redis. Aprenderás a crear una interfaz de autenticación con Passport.js, donde los usuarios proporcionarán sus nombres de usuario y contraseñas. A pesar de su complejidad, los mecanismos de autenticación se pueden implementar fácilmente en Node.js.
Tecnologías a utilizar
Antes de saltar de cabeza a nuestro tutorial de autenticación Passport.js, echemos un vistazo a las tecnologías que vamos a utilizar en este capítulo.
¿Qué es Passport.js?
- Passport.js es un middleware de autenticación Node.js simple y discreto para Node.js
- Passport.js se puede colocar en cualquier aplicación web basada en Express.js.
- Passport es un middleware de autenticación para Node.js que vamos a utilizar para la administración de sesiones.
¿Qué es Redis?
Redis es un almacén de estructura de datos en memoria de código abiertoEl Código Abierto u Open Source se refiere al código fuente del software que es abiertamente alcanzable y que puede ser cambiado y distribuido por cualquier persona. La propuesta de código abierto estipula diez requerimientos para las licencias de software de código abierto. El principio El código fuente de un software se hace público: cualquiera puede leerlo, desarrollar el propio software y copiarlo. El software puede ser utilizado o distribuido más (con licencia BSD), utilizado como base de datos, cachéUn caché es un tipo de memoria auxiliar de la que se puede recuperar a alta velocidad con una capacidad de almacenamiento relativamente pequeña. Se encuentra entre la unidad central de procesamiento (CPU) y la memoria principal. Ayuda a evitar el acceso al disco duro o los recálculos complejos almacenando temporalmente ciertos datos y haciéndolos disponibles rápidamente cuando sea necesario. El caché almacena una copia de la petición actual y más y intermediario de mensajes.
Redis está diseñado para admitir diferentes tipos de estructuras de datos abstractas, como cadenas, hashes, listas, conjuntos, conjuntos ordenados con consultas de rango, mapas de bits, hipervínculos e índices geoespaciales con consultas de radio.
Vamos a almacenar la información de la sesión de nuestro usuario en Redis, y no en la memoria del proceso. De esta manera nuestra aplicación será mucho más fácil de escalar.
La aplicación de demostración que necesita autenticación
Para propósitos de demostración, construyamos una aplicación que haga solo lo siguiente:
- exponer un formulario de inicio de sesión,
- exponer dos páginas protegidas:
- una página de perfil,
- notas aseguradas
La estructura del proyecto
Vamos a utilizar la siguiente estructura:
├── app | ├── authentication | ├── note | ├── user | ├── index.js | └── layout.hbs ├── config | └── index.js ├── index.js └── package.json
Como puedes ver, organizaremos los archivos y directorios en torno a las características. Tendremos una página de usuario, una página de notas y algunas funciones relacionadas con la autenticación.
El flujo de autenticación Node.js
Nuestro objetivo¿Qué es un objetivo?En marketing, un objetivo es el resultado que se pretende alcanzar en un periodo de tiempo, a través el uso de los recursos disponibles. Por tanto, se debe formular de una forma clara y hace falta que sea accesible y medible. más es implementar el siguiente flujo de autenticación en nuestra aplicación utilizando Passport.js:
- El usuario ingresa nombre de usuario y contraseña
- La aplicación comprueba si coinciden.
- Si coinciden, envía un encabezado Set-Cookie que se utilizará para autenticar otras páginas.
- Cuando el usuario visita páginas del mismo dominioUn dominio es una sección de Internet con direcciones que comparten un sufijo común o están bajo el control de una organización o individuo en particular. Está organizado jerárquicamente. Tanto los objetos físicos como los virtuales pueden ser direccionados con el nombre de dominio. Estos objetos pueden ser webs, ordenadores en red o servicios, como impresoras, faxes o servidores de correo. Cada objeto está referenciado por una dirección IP única, más, la cookieUna cookie es un registro que es almacenado por un servidor web en el disco duro del usuario. El archivo recibido es una combinación de caracteres formada por números y letras, que asigna una cierta identidad al usuario (cliente). No podrán exceder un tamaño máximo de 4 KB y contendrán, por ejemplo, información sobre la extensión de la visita o sobre lo que el usuario haya pulsado. Cuando el cliente más configurada previamente se agregará a todas las solicitudes
- Autentica las páginas restringidas con esta cookie.
Para configurar una estrategia de autenticación como esta en una aplicación Node.js usando Passport.js, sigue estos tres pasos:
Paso 1: Configuración de Express
Vamos a utilizar Express para el marco del servidorLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en más.
// file:app/index.js
const express = require('express')
const passport = require('passport')
const session = require('express-session')
const RedisStore = require('connect-redis')(session)
const app = express()
app.use(session({
store: new RedisStore({
url: config.redisStore.url
}),
secret: config.redisStore.secret,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
¿Qué hicimos aquí?
En primer lugar, requerimos todas las dependencias que necesita la administración de la sesión. Después de eso, hemos creado una nueva instancia del módulo express-session, que almacenará nuestras sesiones.
Para la tienda de respaldo, estamos usando Redis, pero puedes usar cualquier otro, como MySQLConcepto de MySQL¿Qué es el programa MySQL?MySQL es un sistema de administración de bases de datos que tiene una doble licencia. Por una parte es de código abierto, pero por otra, tiene una versión comercial gestionada por la compañía Oracle. En este momento, es la base de datos de código abierto más famosa y utilizada en el mundo entero.Como él, podemos hallar otras como la propia Oracle o Microsoft SQL más o MongoDB.
Paso 2: Configuración de Passport.js para Node.js
Passport.js es un gran ejemplo de una biblioteca que usa complementos. En este tutorial de passport.js, estamos agregando el módulo passport-local que permite la integración fácil de una estrategia de autenticación local simple utilizando nombres de usuario y contraseñas.
En aras de la simplicidad, en este ejemplo, no estamos utilizando una segunda tienda de respaldo, sino solo una instancia de usuario en memoria. En aplicaciones de la vida real, findUser buscaría un usuario en una base de datos.
// file:app/authenticate/init.js
const passport = require('passport')
const bcrypt = require('bcrypt')
const LocalStrategy = require('passport-local').Strategy
const user = {
username: 'test-user',
passwordHash: 'bcrypt-hashed-password',
id: 1
}
passport.use(new LocalStrategy(
(username, password, done) => {
findUser(username, (err, user) => {
if (err) {
return done(err)
}
// Usuario no encontrado
if (!user) {
return done(null, false)
}
// Utiliza siempre contraseñas hash y comparaciones de tiempo fijo
bcrypt.compare(password, user.passwordHash, (err, isValid) => {
if (err) {
return done(err)
}
if (!isValid) {
return done(null, false)
}
return done(null, user)
})
})
}
))
Una vez que las devoluciones de findUser con nuestro objeto de usuario lo único que queda es comparar la contraseña de hash del usuario y la contraseña real para ver si hay una coincidencia. Siempre almacena las contraseñas con hash y usa la comparación de tiempo fijo para evitar ataques de tiempo.
Si es una coincidencia, permitimos que el usuario ingrese: return done(null, user) ( devolviendo al usuario el Passport ), si no devolvemos un error no autorizado (devolviendo nada al Passport- return done(null)).
Paso 3: Agregar puntos finales protegidos
Para agregar puntos finales protegidos, estamos aprovechando el patrón de middleware que utiliza Express. Para eso, vamos a crear el middleware de autenticación primero:
// file:app/authentication/middleware.js
function authenticationMiddleware () {
return function (req, res, next) {
if (req.isAuthenticated()) {
return next()
}
res.redirect('/')
}
}
Solo tiene un rol si el usuario está autenticado (tiene las cookies correctas); simplemente llama al siguiente middleware. De lo contrario, redirige a la página donde el usuario puede iniciar sesión.
Su uso es tan fácil como agregar un nuevo middleware a la definición de ruta.
// file:app/user/init.js
const passport = require('passport')
app.get('/profile', passport.authenticationMiddleware(), renderProfile)
Resumen – Autenticación con Passport.js
En este tutorial de Passport.js, has aprendido cómo agregar una autenticación básica a tu aplicación Node.js. Más adelante, puedes extenderlo con diferentes estrategias de autenticación, como FacebookConcepto de Facebook¿Qué es Facebook?Facebook es una red social hecha por personas y pensada para conectar a personas. Es una de las pioneras de este sector, una de las primeras plataformas que llegaron a Internet con la finalidad de facilitar la comunicación entre usuarios de todas partes, compartir información y contactar con familiares lejanos, amistades o conocidos.Hoy en día, es la red más popular de todo Internet. Nacida en 2004 más o TwitterTwitter es una red social en Internet que permite a los usuarios difundir información en tiempo real. La característica más notable de twitter solía ser su limitación de tweets a 140 caracteres, pero en septiembre de 2017 se incrementó a 280 caracteres. El único requerimiento para utilizar Twitter es la creación de una cuenta gratuita. Tweets Twitter contiene pequeñas piezas de información llamada tweets. Se puede escribir un máximo de más. Puede encontrar más estrategias en http://passportjs.org/.





