Instale los módulos jsonwebtoken y dotenv
npm install --save jsonwebtoken dotenv
Edite el archivo swagger_output.json
con las entradas host, securityDefinitions y security:
...
"schemes": [
...
],
"host": "localhost:3002",
"securityDefinitions": {
"ApiKeyAuth": {
"name": "jwt_token",
"in": "header",
"type": "apiKey",
"description": "JWT Token header"
}
},
"security": [ { "ApiKeyAuth": [] } ],
"paths": {
...
...
En la raíz del proyecto, cree el archivo .env
. Agregue las variables PORT, ADMIN y TOKEN_SECRET. Para la variable TOKEN_SECRET y su valor, utilice el dato del proyecto security.
PORT=3002
ADMIN=admin
TOKEN_SECRET=...8uUYwT...
En el archivo app.js
, agregue el módulo dotenv
y cargue los datos de configuración.
var logger = require('morgan');
...
/* MÓDULO dotenv */
const dotenv = require('dotenv');
/* CARGA DE DATOS DE CONFIGURACION EN MEMORIA */
dotenv.config();
...
var indexRouter = ...
var app = express();
Cree el archivo /middleware/auth.js
, con:
const jwt = require('jsonwebtoken');
/* VERIFICADOR DE AUTENTICACIÓN */
var authenticateJWT = (req, res, next) => {
const jwt_token = req.headers["jwt_token"];
if (jwt_token) {
const token = jwt_token.split(' ')[1];
/* Payload decodificado */
jwt.verify(token, process.env.TOKEN_SECRET, (err, payload) => {
if (err) {
return res.sendStatus(403);
}
/* Datos del usuario */
console.log(payload)
/* Forma parte del requerimiento */
req.user = payload;
return next();
});
} else {
return res.sendStatus(403);
}
};
module.exports = authenticateJWT;
Modifique el archivo app.js
, obtenga la referencia al middleware y la intercepción para la ruta /suppliers
...
var suppliersRouter = ...;
/* Referencia al middleware */
var authJWT = require('./middleware/auth');
const swaggerUi = ...
...
app.use('/users', ...);
/* Agregue el middleware para la ruta '/suppliers' */
app.use('/suppliers', authJWT, suppliersRouter);
app.use('/documentation', ... )
...
npm start
http://localhost:3002/documentation
/suppliers/findAll
Bearer eyJhbG...
/suppliers/findAll
Edite el archivo routes/suppliers.js
para el controlador para el verbo HTTP GET
con la ruta /findAll
router.get('/findAll', function(req, res, next) {
/* Verificador de autorización */
const { role } = req.user;
if (role !== process.env.ADMIN) {
return res.sendStatus(401);
}
Suppliers.findAll({ ... })
...
});
...
npm start
http://localhost:3002/documentation
Bearer eyJhbG...
/suppliers/findAll
Bearer eyJhbG...
/suppliers/findAll
Authentication in REST APIs acts as the crucial gateway, ensuring that solely authorized users or applications gain access to the API's resources.
— Alex Xu (@alexxubyte) December 19, 2023
Some popular authentication methods for REST APIs include:
1. Basic Authentication:
Involves sending a username and password with… pic.twitter.com/Y4CKqZUhBF
http methods, middleware, autenticación, autorización