Autenticación JWT con Node.js

JSON Web Token es un estándar abierto para transferir datos de forma segura entre partes que utilizan un objeto JSON. JWT se usa para mecanismos de autenticación sin estado para usuarios y proveedores, lo que significa que mantener la sesión está en el lado del cliente en lugar de almacenar sesiones en el servidor. Aquí, implementaremos el sistema de autenticación JWT en NodeJs.

Módulos Requeridos:

  • NodeJs: NodeJs para backend
  • dotenv: para manejar datos de configuración
npm install dotenv
  • ExpressJS: ExpressJS para el manejo de rutas.
  • módulo jsonwebtoken:
npm install jsonwebtoken

    Todos los pasos:

  1. Crea nuestro proyecto:

    Para crear un proyecto de Node, se usa npm init -y en la carpeta en la que el usuario desea crear un proyecto. La línea de comandos de npm hará una serie de preguntas como el nombre, la licencia, los scripts, la descripción, el autor, las palabras clave, la versión, el archivo principal, etc. Una vez que npm haya terminado de crear el proyecto, se verá un archivo package.json en la carpeta del proyecto. como prueba de que el proyecto ha sido inicializado.

    npm init -y

  2. Instalar módulos

    Después de crear el proyecto, el siguiente paso es incorporar los paquetes y módulos que se utilizarán en el Proyecto de Node. Para instalar paquetes y módulos en el proyecto, use la siguiente sintaxis:

    npm install express dotenv jsonwebtoken

  3. Crea nuestro Servidor

    Importando todas las dependencias y creando un servidor usando express.js

    JavaScript

    const express = require('express');
    const dotenv = require('dotenv');
    const jwt = require('jsonwebtoken');
      
    const app = express();
      
    // Set up Global configuration access
    dotenv.config();
      
    let PORT = process.env.PORT || 5000;
    app.listen(PORT,() => {
      console.log(`Server is up and running on ${PORT} ...`);
    });
  4. Crear archivo de configuración (.env)

    Estos archivos contienen aquellas variables que necesitamos pasar al entorno de nuestra aplicación.

    JavaScript

    PORT = 5000
      
    JWT_SECRET_KEY = gfg_jwt_secret_key
      
    TOKEN_HEADER_KEY = gfg_token_header_key
  5. Crear ruta para generar JWT

    Creando una solicitud de ‘publicación’ que envía el token JWT en la respuesta.

    JavaScript

    app.post("/user/generateToken", (req, res) => {
        // Validate User Here
        // Then generate JWT Token
      
        let jwtSecretKey = process.env.JWT_SECRET_KEY;
        let data = {
            time: Date(),
            userId: 12,
        }
      
        const token = jwt.sign(data, jwtSecretKey);
      
        res.send(token);
    });
  6. Crear ruta para validar JWT

    Crear una solicitud de «obtención» que contenga el token JWT en el encabezado y envíe el estado de verificación como respuesta.

    JavaScript

    app.get("/user/validateToken", (req, res) => {
        // Tokens are generally passed in the header of the request
        // Due to security reasons.
      
        let tokenHeaderKey = process.env.TOKEN_HEADER_KEY;
        let jwtSecretKey = process.env.JWT_SECRET_KEY;
      
        try {
            const token = req.header(tokenHeaderKey);
      
            const verified = jwt.verify(token, jwtSecretKey);
            if(verified){
                return res.send("Successfully Verified");
            }else{
                // Access Denied
                return res.status(401).send(error);
            }
        } catch (error) {
            // Access Denied
            return res.status(401).send(error);
        }
    });
  7. Ejecutar servidor

    node index.js

    Archivo index.js completo

    JavaScript

    const express = require('express');
    const dotenv = require('dotenv');
    const jwt = require('jsonwebtoken');
      
    const app = express();
      
    // Set up Global configuration access
    dotenv.config();
      
    let PORT = process.env.PORT || 5000;
    app.listen(PORT,() => {
      console.log(`Server is up and running on ${PORT} ...`);
    });
      
    // Main Code Here  //
    // Generating JWT
    app.post("/user/generateToken", (req, res) => {
        // Validate User Here
        // Then generate JWT Token
      
        let jwtSecretKey = process.env.JWT_SECRET_KEY;
        let data = {
            time: Date(),
            userId: 12,
        }
      
        const token = jwt.sign(data, jwtSecretKey);
      
        res.send(token);
    });
      
    // Verification of JWT
    app.get("/user/validateToken", (req, res) => {
        // Tokens are generally passed in header of request
        // Due to security reasons.
      
        let tokenHeaderKey = process.env.TOKEN_HEADER_KEY;
        let jwtSecretKey = process.env.JWT_SECRET_KEY;
      
        try {
            const token = req.header(tokenHeaderKey);
      
            const verified = jwt.verify(token, jwtSecretKey);
            if(verified){
                return res.send("Successfully Verified");
            }else{
                // Access Denied
                return res.status(401).send(error);
            }
        } catch (error) {
            // Access Denied
            return res.status(401).send(error);
        }
    });
  8. Enviar requests y obtener resultados

    Producción:

    • Solicitud POST

    • Respuesta POST
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aW1lIjoiTW9uIEphbiAxOCAyMDIxIDE2OjM2OjU3IEdNVCswNTMwIChJbmRpYSBTdGFuZGFyZCBU
    aW1lKSIsInVzZXJJZCI6MTIsImlhdCI6MTYxMDk2ODAxN30.QmWFjXhP6YtbzDAHlcE7mDMyXIdnTv1c9xOBCakNZ94
    • OBTENER solicitud

    • Encabezado de solicitud GET

    • Obtener una respuesta
    Successfully Verified

Publicación traducida automáticamente

Artículo escrito por pratikraut0000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *