Header Ads Widget

Ticker

6/recent/ticker-posts

Autenticación de token web JSON con Node.js

 


Protejamos ahora algunos puntos finales haciendo uso de JSON Web Tokens. ¿Qué son los JWT? Los tokens web JSON son objetos JSON codificados en base64url que se cifran mediante el uso de una clave privada. Incrustado dentro del JWT puede haber uno o más conjuntos de pares de nombre y valor. Es posible que tenga elementos como una identificación de usuario o un nombre de usuario incrustados dentro del token. No puede ver estos datos gracias al cifrado implementado, pero se pueden descifrar en el servidor ya que la clave privada está disponible para la aplicación. JWT.io tiene una gran introducción si desea conocer todos los detalles. Por ahora, veamos cómo podemos usar tokens web JSON para proteger varios puntos finales en nuestra API de nodo.


Uso de middleware de autorización

En la ruta y el modelo que acabamos de configurar para las plataformas de los sistemas de videojuegos, permitimos que cualquier usuario envíe una publicación o haga una solicitud a la api que modifica los datos en el servidor. De hecho, casi todas las operaciones, excepto una simple solicitud GET, deberían tener algún tipo de protección. Vamos a configurar eso ahora.


1. Agregue un directorio de middleware

En primer lugar, podemos agregar un directorio de middleware para almacenar el middleware de autorización que usaremos.
aplicación de nodo de directorio de middleware


2. Cree un archivo auth.js

Estamos creando un nuevo archivo auth.js para almacenar la lógica para leer los encabezados de las solicitudes de modo que pueda usarse en cualquier punto final que queramos.
nuevo archivo de middleware authjs


3. Agregue código para leer y verificar JWT

En este archivo auth.js completamos algunos pasos. Primero, requerimos el token web json y los paquetes de configuración. Luego configuramos una función que se exporta para que podamos usar en cualquier otro lugar como queramos. Por último, nos aseguramos de que exista la lógica para leer el token y otorgar o denegar el acceso según el token proporcionado. Tenga en cuenta el uso de la función jwt.verify () que hace el trabajo pesado por nosotros.


/middleware/auth.js


Protección de rutas con nuestro nuevo middleware

Ok, creamos el middleware, ¡ahora usémoslo! Esto es muy sencillo. Para empezar, vamos a aplicar el middleware de autenticación a la ruta POST en el archivo de rutas de las plataformas. Todo lo que tenemos que hacer es requerir el nuevo middleware de autenticación, luego usarlo como segundo argumento para la función router.post ().
requieren el middleware de autenticación y se aplican a la ruta


Probar el middleware de autenticación con Postman

Parece que todo está en su lugar, enviemos una solicitud POST a http: // localhost: 4000 / api / platform sin proporcionar ningún token.
sin solicitud de publicación simbólica

Hasta ahora todo bien, estamos recibiendo el error de "Acceso denegado. No se proporciona JWT ".

Ahora, podemos enviar un token web JSON, pero es un token falso. Simplemente inventamos algo tonto.
token web json no válido en la solicitud de publicación

Ahora queremos hacer una solicitud POST utilizando un JWT válido. Entonces, primero tenemos que encontrar un JWT para usar. Podemos hacer esto inspeccionando los encabezados de respuesta generados por http: // localhost: 4000 / api / users / endpoint. Ahora mira esto. Antes de usar esto en nuestra prueba, veamos cómo decodificar el JWT. Puede visitar https://jwt.io/ y pegar el token en cuestión. Luego, también puede pegar su propia clave privada. En nuestro caso, simplemente lo llamamos PrivateKeyCon esto, podemos verificar el token y también ver cualquier cosa incrustada dentro del token.
decodificar el token web json en jwtio

Esto nos muestra que el ID de usuario de 5b3b8c70eb573812189785feestá incrustado en el token. Ahora, ¿quién en la base de datos tiene esa identificación de usuario? ¡Así es! ¡Señor Momo!
objectid encontrado en jwt
Eso significa que el Sr. Momo es un usuario válido y debería poder realizar una solicitud POST ahora sin problemas. Nos gusta el Sr. Momo.

Ok para esta última prueba, tenemos que hacer un par de cosas. En primer lugar, debemos incluir el JSON Web Token en la solicitud POST que enviamos a la api. ¿Como hacer eso? Simple, simplemente complete el x-auth-tokencampo en Postman.
solicitud de publicación de x-auth-token

Ahora, dado que estamos publicando en http: // localhost: 4000 / api / platform, recordamos que esto creará una nueva plataforma en el servidor. Crearemos la plataforma “Android” así.
datos de la aplicación json en el cuerpo

¡Ahora por el momento de la verdad! Envíe esa solicitud POST utilizando tanto JWT como la carga útil JSON para crear una nueva plataforma.
solicitud de publicación exitosa usando JWT

Recibimos una respuesta con el objeto JSON que especifica "Android". ¿Qué significa esto? ¡Significa que funcionó! ¿No me crees? Miremos también en Compass.
nuevo inserto en mongodb funcionó


Aplicar el middleware de autenticación como mejor le parezca

Aquí está la gran cosa. Conseguimos que este middleware funcionara y lo aplicamos a una ruta o punto final específico.

Recuerde que fue tan fácil como usar un requerimiento para extraer el middleware, así:

Entonces, podemos usarlo como el segundo argumento de la función router.post () así.

Esto significa que ahora puede usarlo en cualquier lugar que desee. Por ejemplo, ningún usuario debería poder eliminar una plataforma sin estar autenticado. ¿Quiere agregar protección a esa ruta? Sencillo.


Resumen de autenticación de token web JSON con Node.js

Con eso, podemos ver cómo es bastante sencillo implementar un middleware para proteger varias rutas haciendo uso de JSON Web Tokens. Si un usuario intenta realizar una solicitud sin enviar un token, la API debería responder con un código de estado 401 que indica que no está autorizado. Si el usuario proporciona un token válido, pero no tiene los privilegios correctos, la API puede responder con un código de estado 403 que indica prohibido. Además, no almacene el JWT en texto sin formato en la base de datos. Es mejor para el cliente almacenar el JWT. En este tutorial, el JWT simplemente se almacenó en la aplicación Postman para realizar pruebas. El propio cartero actuaba como cliente. En una aplicación real, habría algún tipo de cliente integrado en cualquier marco elegido, y el JWT podría almacenarse allí.


Publicar un comentario

0 Comentarios