Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
No se puede verificar JWT - UnhandledPromiseRejectionWarning: JsonWebTokenError: jwt mal formado

Tengo una función que solo envía datos a la base de datos (mis publicaciones). Uso claves privadas y públicas para firmar y verificar tokens. Puedo enviar este token en el encabezado desde el front-end hasta el back-end, pero tengo problemas para verificarlo. Así es como se ve este flujo:

Interfaz

 router.post(`/pp`, async (req, res) => { try { const data = await api.post(`/post-post`, req.body, { headers: { Authorization: 'Bearer ' + req.body.token } }) res.json(data.data) } catch (e) { res.status(e.response.status).json(e.response.data) } })

back-end

 router.post( "/post-post", auth, wrapAsync(generalController.postPost) )

Autenticación de software intermedio

 const jwtService = require('./../services/jwtService') module.exports = async(req, res, next) => { if (req.headers.authorization) { const user = await jwtService.getUser(req.headers.authorization.split(' ')[1]) if (user) { next(); } else { res.status(401).json({ error: 'Unauthorized' }) } } else { res.status(401).json({ error: 'Unauthorized' }) } }

Y servicio JWT

 const jwt = require('jsonwebtoken'); const fs = require("fs"); const path = require("path"); const pathToKeys = path.resolve(__dirname, "../../keys"); module.exports = { sign(payload) { const cert = fs.readFileSync(`${pathToKeys}/private.pem`); return jwt.sign( payload, { key: cert, passphrase: process.env.JWT_PASSPHRASE }, { algorithm: "RS256", expiresIn: "30m" } ) }, getUserPromise(token) { return new Promise((resolve, reject) => { jwt.verify(token, fs.readFileSync(`${pathToKeys}/public.pem`), (err, decoded) => { if(!err) { return resolve(decoded); } else { return reject(err); } }) }) }, async getUser (token) { return await this.getUserPromise(token) } }

El problema comienza después de la función getUserPromise . Esta función puede obtener un token, pero no puedo verificarlo y tengo este problema:

UnhandledPromiseRejectionWarning: JsonWebTokenError: jwt malformed

En realidad, no tengo idea de dónde está el problema. Generé un par de claves, y la función de sign puede cantar y devolver el token, que se ve así: 351e38a4bbc517b1c81e180479a221d404c724107988852c7768d813dd0510e6183306b1d837091b2cddaa07f2427b7a

¿Entonces, cuál es el problema?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

He encontrado la solución a este problema y me da vergüenza. En el servicio JWT, preste atención a esta cadena:

algorithm: "RS256"

Como puede ver, uso RS256 , pero generé certificados en otro formato, por lo que obtuve ese error.

Entonces, si usa certificados RSA, ¡preste atención al algoritmo!

EDITAR:

Así es como puede generar un par para RS256:

  1. Privado
 openssl genrsa -out private.pem -aes256 4096
  1. Público de privado
 openssl rsa -in private.pem -pubout > public.pem
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda