Hashing de Contraseñas en Bases de Datos con Node.js
Clase 7 de 22 • Curso de NestJS: Autenticación con Passport y JWT
Contenido del curso
- 11

Implementación de JSON Web Tokens en APIs para Autenticación Segura
09:42 - 12

Implementación de JWT en Módulo de Autenticación con Variables de Entorno
17:15 - 13

Estrategia y Guardia de Autenticación con JWT en NestJS
16:38 - 14

Extensión de Guardianes JWT en NestJS para Endpoints Públicos
12:39 - 15

Control de Roles y Permisos con JSON Web Tokens en TypeScript
23:08 - 16
Creación de Endpoints Seguros con JWT en NestJS
02:13
- 17

Configuración y Despliegue de MongoDB Atlas en Heroku
06:24 - 18

Configuración de Variables de Entorno en Heroku para MongoDB
16:25 - 19

Configuración de PostgreSQL en Heroku para Node.js
07:32 - 20

Configuración de Conexiones a Base de Datos en Heroku y Entorno Local
11:24 - 21

Migraciones con TimeORM en Producción: Configuración y Ejecución
20:41
¿Cómo se protege una contraseña mediante hashing?
El hashing de contraseñas es esencial para mantener la seguridad de los datos en una base de datos. Este proceso transforma una contraseña en una secuencia irreconocible mediante algoritmos de cifrado. Esto no solo protege la información si alguien accede a la base de datos, sino que también garantiza que ni siquiera los administradores puedan ver las contraseñas reales de los usuarios.
¿Por qué es importante el hashing?
- Protección de datos: Impide que atacantes obtengan contraseñas directamente de la base de datos.
- Privacidad del usuario: Asegura que ni el administrador ni otras personas vean las contraseñas.
- Seguridad adicional: Evita que contraseñas débiles, como '123456', sean fácilmente explotadas.
¿Cómo implementar hashing en NodeJS?
Para implementar correctamente el hashing de contraseñas en un proyecto en NodeJS, es necesario seguir ciertos pasos y utilizar las herramientas adecuadas.
Paso 1: Instalación de la librería de hashing
Utiliza una librería de confianza específicamente diseñada para NodeJS. Asegúrate de instalar también el tipado, ya que muchas librerías no lo incluyen por defecto.
npm install bcrypt
npm install @types/bcrypt --save-dev
Paso 2: Implementación del hashing en el servicio
Una vez instalada la librería, debes integrarla en el servicio donde se gestionan las credenciales del usuario.
import * as bcrypt from 'bcrypt';
async function createUser({ email, password }) {
// Obtener y generar un hash de la contraseña
const hashedPassword = await bcrypt.hash(password, 10);
// Guardar el usuario con la contraseña hasheada
saveUserToDatabase({ email, password: hashedPassword });
}
El proceso de hashing es asíncrono y por eso es importante manejarlo dentro de una función async. Normalmente se utilizan 10 saltos (rondas) para incrementar la complejidad del hashing.
Paso 3: Excluir contraseñas del retorno de consultas
Es importante que las contraseñas no se devuelvan en las respuestas de las API. Usa serialización y otras técnicas para asegurarte de que las contraseñas estén escondidas.
class UserTransformer {
// Decorador para excluir el campo 'password'
@Exclude()
password: string;
}
¿Cómo verificar un usuario con autenticación?
Además del hashing, es vital contar con un mecanismo de búsqueda eficiente para autenticar a los usuarios. Crear un método para buscar por email es crucial.
async function findByEmail(email: string) {
return userRepo.findOne({ email });
}
Preparación del servicio para la autentificación
Una vez ajustados los métodos, es vital habilitar el servicio para ser consumido desde otros módulos.
@Module({
exports: [UserService],
})
export class UserModule {}
¿Cómo manejar el hashing en MongoDB?
El proceso de hashing en MongoDB se mantiene similar al de otros sistemas de gestión de bases de datos. La implementación varía dependiendo del ORM o la herramienta que estés utilizando, pero el concepto sigue siendo el mismo: proteger la información de usuario mediante métodos de cifrado robustos.
Siempre mantén tus conocimientos al día y recuerda que la seguridad es un aspecto crucial del desarrollo de software. Con dotarte de estas herramientas y prácticas, brindas a tus usuarios la protección que merecen.