Backend de una aplicación de gestión de contraseñas con enfoque en seguridad y privacidad.
Este proyecto sigue el principio de zero-knowledge, lo que significa que el servidor nunca tiene acceso a las contraseñas en texto plano. Toda la información sensible es cifrada en el cliente antes de enviarse.
Descarga Node.js desde: https://nodejs.org Instala la versión LTS.
Verifica la instalación:
node --version
npm --versionUbícate dentro de la carpeta del backend:
cd backendnpm installCrea un archivo .env en la raíz del proyecto:
PORT=3000
JWT_SECRET=tu_clave_super_segura
JWT_EXPIRES_IN=cuanto_tiempo_estara_disponible_la_cuenta
DB_FILE=nombre_dela_base_de_datos - Es la clave que firma los tokens de autenticación
- Debe ser larga, aleatoria y privada
- Nunca la subas a GitHub
Puedes generar una segura con:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Modo normal:
npm startModo desarrollo:
npm run devSalida esperada:
📦 Base de datos conectada: /ruta/vault.db
✅ Servidor corriendo en http://localhost:3000
| Método | Ruta | Descripción | Auth |
|---|---|---|---|
| GET | / | Estado del servidor | ❌ |
| POST | /api/auth/register | Registro | ❌ |
| POST | /api/auth/login | Login (JWT) | ❌ |
| GET | /api/vault | Obtener datos cifrados | ✅ |
| PUT | /api/vault | Guardar datos cifrados | ✅ |
-
El usuario se registra
-
La contraseña se hashea con bcrypt
-
En login:
- Se valida la contraseña
- Se genera un JWT
-
El frontend:
- Cifra los datos con AES-256-GCM
- Envía información ya protegida
-
El backend:
- Solo almacena datos cifrados
- Nunca accede a contraseñas reales
Password Manager
│
├──index.html
├──script.js
├──styles.css
├──README.md
├──.gitignore
│
├──backend/
├── server.js
├── app.js
├── db.js
├── auth.js
├── vault.js
├── middleware.js
├── .env
└── package.json
- bcrypt → Hash de contraseñas
- JWT → Autenticación
- AES-256-GCM → Cifrado del lado del cliente
- SQLite → Base de datos
POST http://localhost:3000/api/auth/register
{
"nombre": "Juan",
"email": "juan@email.com",
"password": "123456789"
}POST http://localhost:3000/api/auth/login
{
"email": "juan@email.com",
"password": "123456789"
}GET http://localhost:3000/api/vault
Header:
Authorization: Bearer TU_TOKEN
- No subir
.enval repositorio - Este backend depende de un frontend que realice el cifrado
- Proyecto enfocado en seguridad y buenas prácticas
- No subir carpeta
node_modulesnibasededatos.db