Los tokens web JSON (JWT) son una forma popular de agregar autenticación y autorización a aplicaciones web y móviles. En NodeJS, puede utilizar el paquete jsonwebtoken para crear, verificar y decodificar tokens JWT. En esta sección, exploraremos cómo trabajar con JWT en NodeJS y cómo agregar información adicional a un token JWT.
En primer lugar, es importante comprender qué es un JWT. Un JWT es una representación compacta y segura de una serie de reclamaciones que pueden intercambiarse entre dos partes. Los reclamos son información que desea transmitir de forma segura entre las partes. Un token JWT consta de tres partes: un encabezado, una carga útil y una firma.
El encabezado normalmente contiene dos partes: el tipo de token, que es JWT, y el algoritmo de firma, como HMAC SHA256 o RSA. La carga útil contiene las reclamaciones que desea transmitir. Las afirmaciones pueden ser declaraciones sobre una entidad (normalmente el usuario) y datos adicionales. La firma se utiliza para verificar que el remitente del JWT es quien dice ser y para garantizar que el mensaje no haya sido alterado en el camino.
Para comenzar a trabajar con JWT en NodeJS, necesitará instalar el paquete jsonwebtoken. Puedes hacer esto usando npm, el administrador de paquetes de NodeJS, con el comando: npm install jsonwebtoken.
Una vez instalado, puede importar el paquete jsonwebtoken a su código con el siguiente comando: const jwt = require('jsonwebtoken').
Para crear un token JWT, puede utilizar el método jwt.sign(). Este método acepta tres argumentos: la carga útil, una clave secreta y un objeto de opciones. La carga útil es el conjunto de reclamaciones que desea incluir en el token. La clave secreta se utiliza para firmar el token y garantizar su integridad. El objeto de opciones puede incluir varias opciones, como el algoritmo de firma a utilizar y la vida útil del token.
Por ejemplo, puede crear un token JWT con los siguientes reclamos: ID de usuario y nombre de usuario, de la siguiente manera:
dejar carga útil = { ID de usuario: '123', Nombre de usuario: 'John Doe' }; let clavesecreta = 'miClaveSecreta'; dejar opciones = { algoritmo: 'HS256', caducaEn: '1h' }; let token = jwt.sign(carga útil, clave secreta, opciones);
El token resultante será una cadena que podrá pasar al cliente. Luego, el cliente puede utilizar este token para autenticar solicitudes posteriores.
Para agregar información adicional a un token JWT, simplemente puede agregar más propiedades al objeto de carga útil. Por ejemplo, si desea agregar el correo electrónico y la función del usuario, puede hacer lo siguiente:
dejar carga útil = { ID de usuario: '123', nombre de usuario: 'John Doe', correo electrónico del usuario: 'john.doe@example.com', rol de usuario: 'admin' }; let token = jwt.sign(carga útil, clave secreta, opciones);
Esta información adicional se incluirá en el token JWT y se puede utilizar para tomar decisiones de autorización en el servidor. Por ejemplo, puede verificar la función del usuario para determinar si tiene permiso para acceder a un recurso específico.
Para verificar un token JWT y extraer las reclamaciones, puede utilizar el método jwt.verify(). Este método toma tres argumentos: el token, la clave secreta y un objeto de opciones. El método devuelve la carga útil si el token es válido y arroja un error si el token no es válido o ha caducado.
Por ejemplo, puede verificar un token y extraer los reclamos de la siguiente manera:
dejar token = '...'; // el token JWT recibido del cliente intentar { let payload = jwt.verify(token, secretKey); console.log(carga útil); } atrapar (errar) { console.log('Token no válido o caducado'); }
El objeto de carga útil resultante contendrá todos los reclamos que incluiste al crear el token, incluida cualquier información adicional que agregaste.
En resumen, los JWT son una forma poderosa y flexible de agregar autenticación y autorización a sus aplicaciones NodeJS. Puede incluir cualquier información que desee en el token, siempre que sepa que cualquier persona que tenga el token puede leer la información del token. Por lo tanto, debe evitar incluir información confidencial en el token a menos que esté cifrado.