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
-
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
-
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
-
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} ...`);
});
-
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
-
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);
});
-
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);
}
});
-
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);
}
});
-
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
Todos los pasos:
Publicación traducida automáticamente
Artículo escrito por pratikraut0000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA