Documentos de Académico
Documentos de Profesional
Documentos de Cultura
mrea@utn.edu.ec - 2022
Fuentes:
https://asfo.medium.com/autenticando-un-api-rest-con-nodejs-y-jwt-json-web-tokens-
5f3674aba50e
https://openwebinars.net/blog/que-es-json-web-token-y-como-funciona/
Requisitos previos
Tener una instalación de nodejs y vsc
Qué es JWT?
JWT (JSON Web Token) es un estándar qué está dentro del documento RFC 7519.
En el mismo se define un mecanismo para poder propagar entre dos partes, y de forma segura,
la identidad de un determinado usuario, además con una serie de claims o privilegios.
Estos privilegios están codificados en objetos de tipo JSON, que se incrustan dentro de del
payload o cuerpo de un mensaje que va firmado digitalmente.
El token JWT tiene tres partes codificadas en Base64, cada una separada por un punto. Puede
comprobarse en https://jwt.io/
Para asegurar que este intercambio de información sea cifrada, debe usarse HTTPS.
Mecanismo
El mecanismo de autenticación y autorización mediante JWT es el siguiente:
Creación del proyecto
Crear una carpeta jwt e instalar express y jsonwebtoken y luego abrir el proyecto con vsc:
mkdir jwt
cd jwt
npm install --save express jsonwebtoken
touch index.js
mkdir configs
touch configs/config.js
code .
Editar el archivo config.js
module.exports = {
llave: "swempresarial2022*"
}
app.set('llave', config.llave);
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000 http://localhost:3000')
});
//login:
app.post('/autenticar', (req, res) => {
if (req.body.usuario === "curso" && req.body.contrasena === "holamundo") {
const payload = {
check: true
};
const token = jwt.sign(payload, app.get('llave'), {
expiresIn: 1440
});
res.json({
mensaje: 'Autenticación correcta.',
token: token
});
} else {
res.json({ mensaje: "Usuario o contraseña incorrectos." })
}
})
//middleware:
const rutasProtegidas = express.Router();
rutasProtegidas.use((req, res, next) => {
const token = req.headers['access-token'];
if (token) {
jwt.verify(token, app.get('llave'), (err, decoded) => {
if (err) {
return res.json({ mensaje: 'Token incorrecto.' });
} else {
req.decoded = decoded;
next();
}
});
} else {
res.send({
mensaje: 'Debe indicar un token.'
});
}
});
//api:
app.get('/datos', rutasProtegidas, (req, res) => {
const datos = [
{ id: 1, nombre: "Luisa" },
{ id: 2, nombre: "Sergio" },
{ id: 3, nombre: "Carlos" }
];
res.json(datos);
});
Ejecutar el servidor:
node index.js
Para comprobar la autenticación, utilizar un cliente de API REST. En este caso usamos el
plugin "RESTED" de Firefox:
Luego con el token devuelto, ya se puede acceder a los endpoints restringidos: