17.2. Autenticación y autorización en APIs de NodeJS: Autorización con roles y permisos
Página 100 | Escuchar en audio
17.2. Autenticación y autorización en las API de NodeJS: autorización con roles y permisos
Al crear API sólidas y seguras en NodeJS, la autenticación y la autorización son aspectos críticos que garantizan la seguridad e integridad de los datos. La autenticación es el proceso de verificar la identidad del usuario, mientras que la autorización es el proceso de verificar los permisos del usuario autenticado. En este capítulo, nos centraremos en la autorización con roles y permisos.
Comprensión de funciones y permisos
En una aplicación, diferentes usuarios pueden tener diferentes niveles de acceso. Por ejemplo, en un sistema de gestión de proyectos, un usuario podría ser "Administrador", "Gerente" o "Colaborador". Cada uno de estos roles puede tener permisos diferentes. A un 'Administrador' se le puede permitir crear, leer, actualizar y eliminar cualquier proyecto, mientras que un 'Administrador' solo puede crear, leer y actualizar proyectos, pero no eliminarlos. Un 'Colaborador' sólo puede leer proyectos. Estos son los roles y permisos.
Implementación de autorización con roles y permisos en NodeJS
Para implementar la autorización con roles y permisos en NodeJS, primero necesitamos crear un modelo de usuario que incluya el rol del usuario. A continuación, necesitamos crear una función de middleware que verifique la función del usuario y otorgue o niegue el acceso según esa función.
1. Creando el modelo de usuario
Podemos utilizar Mongoose, un popular ODM (Object Data Modeling) para MongoDB, para crear nuestro modelo de usuario. A continuación se muestra un ejemplo de cómo podría verse el modelo de usuario:
const mangosta = require('mangosta'); const UserSchema = nueva mangosta.Schema({ nombre: cadena, correo electrónico: cadena, contraseña: cadena, role: { tipo: cadena, enumeración: ['Administrador', 'Administrador', 'Colaborador'], predeterminado: 'Colaborador' } }); module.exports = mongoose.model('Usuario', UserSchema);
2. Creando la función de middleware
A continuación, necesitamos crear una función de middleware que verifique el rol del usuario. Podemos hacer esto usando JWT (JSON Web Token), un estándar de token de acceso que permite la autenticación entre dos partes. Cuando un usuario se autentica, se genera un token JWT y se envía al usuario. Este token contiene información sobre el usuario, incluida su función. A continuación se muestra un ejemplo de cómo podría verse la función de middleware:
const jwt = require('jsonwebtoken'); función authRole (rol) { retorno (req, res, siguiente) => { token const = req.header('token-autenticación'); if (!token) devuelve res.status(401).send('Acceso denegado'); intentar { const verificado = jwt.verify(token, proceso.env.TOKEN_SECRET); if (verified.role! == rol) return res.status(403).send('Forbidden'); req.usuario = verificado; próximo(); } atrapar (errar) { res.status(400).send('Token no válido'); } }; } módulo.exportaciones = authRole;
Con esta función de middleware, podemos proteger nuestras rutas según el rol del usuario. Por ejemplo, podemos proteger la ruta de eliminación del proyecto para que solo los usuarios 'Administradores' puedan acceder a ella:
const expresar = requerir('expresar'); enrutador constante = express.Router(); const authRole = require('../middleware/authRole'); router.delete('/proyecto/:id', authRole('Admin'), (req, res) => { // eliminar proyecto });
En resumen, la autorización con roles y permisos es una parte esencial de la creación de API seguras en NodeJS. Le permite controlar el acceso a diferentes partes de su aplicación según la función del usuario. Implementar esto correctamente puede ayudar a prevenir el acceso no autorizado y proteger los datos de su aplicación.
Ahora responde el ejercicio sobre el contenido:
¿Cuál es el papel de la autorización con roles y permisos en la creación de API seguras en NodeJS?
¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.
¡Tú error! Inténtalo de nuevo.
Siguiente página del libro electrónico gratuito: