Saltar al contenido principal

Autorización

La autorización en Express permite controlar el acceso a rutas y recursos según los permisos o roles de los usuarios. Esto se implementa generalmente mediante middleware, que verifica la identidad del usuario y sus privilegios antes de permitirle continuar con la solicitud.

Middleware de autorización

Un middleware de autorización intercepta las solicitudes y determina si el usuario tiene permisos para acceder a un recurso específico:

function checkRole(role) {
return (req, res, next) => {
const user = req.user; // Se asume que la autenticación ya se realizó
if (!user || user.role !== role) {
return res.status(403).json({ mensaje: 'No autorizado' });
}
next();
};
}

// Uso en rutas
app.get('/admin/dashboard', checkRole('admin'), (req, res) => {
res.send('Panel de administración');
});

Integración con autenticación

La autorización suele combinarse con un sistema de autenticación, como JWT o tokens de sesión, que permite identificar al usuario:

import jwt from 'jsonwebtoken';

function authenticateToken(req, res, next) {
const token = req.headers['authorization'];
if (!token) return res.status(401).send('Token requerido');

jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) return res.status(403).send('Token inválido');
req.user = user;
next();
});
}

app.use(authenticateToken);

Comprobaciones adicionales en controladores

Además del middleware, los controladores pueden realizar verificaciones de permisos adicionales según la lógica de negocio:

app.put('/usuarios/:id', (req, res) => {
if (req.user.id !== parseInt(req.params.id) && req.user.role !== 'admin') {
return res.status(403).json({ mensaje: 'Acceso denegado' });
}
// Lógica de actualización
});

Buenas prácticas y convenciones

  • Separar autenticación y autorización para mantener claridad en la lógica de seguridad.
  • Usar middleware para centralizar la verificación de permisos y roles.
  • Evitar exponer información sensible en los mensajes de error; devolver respuestas genéricas como 403 Forbidden.
  • Nombrar middleware de forma descriptiva (auth, checkRole, canEdit) para facilitar su reutilización.
  • Comprobar permisos siempre antes de ejecutar acciones que modifiquen datos o accedan a información sensible.