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.