Autenticación basada en Token y consultas de bases de datos MS SQL con NODE.JS y EXPRESS.

Hola, retomando nuevamente la escritura de artículos, vamos con algo nuevo que me esta tocando ver en el trabajo que es NODE.JS.

La idea de este post es generar una API con autenticación basada en token y consultas de datos en MS SQL en base al rol de cada usuario.

Para esto desarrollaremos una aplicación bien simple en NODE.JS que:

  1. Utilize Autenticación basada en token, utilizando JWT (JSON WEB TOKENS)
  2. Consultas a BD utilizando el ORM Sequelize.js
    1. definición del modelo
    2. Utilización de SCOPES
    3. Uso de Asociaciones (1:n, n:n, 1:1).
    4. Uso de consultas de MSSQL o RAW QUERYS.
    5. Uso de procedimientos almacenados.
  3. Consultas basadas en ROL.

Que se necesita:

1 –  Node

Descarga e instala NODE desde https://nodejs.org/es/ , yo instale la versión 8.9.4 [LTS] para windows 10 de 64.

2 – Postman

Descarga Postman desde https://www.getpostman.com/

3 – Tu editor de texto favorito.

Por este lado usamos Sublime Text 3

4 – Un motor de base de datos

Para efectos de este ejemplo utilizaremos MS SQL 2017 Express.

 5 – Packages varios, a instalar en el transcurso de este texto.

1 – Autenticación basada en tokens

Existen varias formas de autenticar un usuario en una aplicación web:

Una de ellas es haciendo match entre usuario y clave en una base de datos y crear un registro de sesion que es almacenada en base de datos. Por ende se debe almacenar un registro por cada vez que el usuario se autentique en el sistema.

Otra es utilizando TOKENS, en donde no se guarda un registro de sesión, sino que se solicita un token para acceder al sistema.

Como funciona:

Se utiliza  usuario/contraseña para identificarse en el sistema, si existe el usuario y la contraseña ingresada es la correcta el backend del sistema genera un token que es devuelto al sistema solicitante, A partir de ahi, cada petición HTTP que haga el usuario va acompañada de un token en la cabecera.

Este Token no es más que una firma cifrada que permite a una API identificar al usuario que esta realizando peticiones. Este token no se almacena en el servidor, si no en el lado del cliente y es la API  que se encarga de descrifrar ese Token y redirigir el flujo de la aplicación en un sentido u otro.

(entiéndase por autenticar o autenticación el:   Procedimiento informático que permite asegurar que un usuario de un sitio web u otro servicio similar es auténtico o quien dice ).

Manos a la obra

1 – Creamos un directorio donde alojar nuestra carpeta

2 – Abrimos una consola y vía NPM comenzamos a instalar los packages necesarios para nuestra api.

2 . 1 -Express.

En detalle en: http://expressjs.com/es/starter/installing.html

2.2 – JWT Jason web token

Información del package en: https://www.npmjs.com/package/jsonwebtoken

2.3 – Sequelize y Tedious

2.4 – Bcrypt

2.5 – Nodemon

3 – Creamos la base de datos de nombre EjemploUsuariosRoles en nuestro motor de bases de datos microsoft sql server.

3.1 – Ejecutamos el siguiente script que contiene las tablas, relaciones y datos de ejemplo para nuestro ejemplo.

4 – Estructura del proyecto

En nuestra carpeta debemos generar los siguientes archivos y carpetas.

Importante acá modificar nuestro archivo package.json, que es creado en el momento de ejecutar npm init e ingresar los datos requeridos, dentro de scripts dejar el siguiente comando para levantar la aplicación:

Archivos

Hola mundo

Para probar el funcionamiento de nuestra api necesitamos los siguientes códigos en nuestros archivos.

bin/www

app.js

server/routes.js

y hacemos correr nuestra aplicación ejecutando en la consola:

si esta correcto todo, deberia aparecer el mensaje:

“Nuestra api-node.js esta escuchando en el puerto: 8001”

Ahora con utilizando postman, necesitamos realizar una solicitud a nuestra aplicación a la raiz de nuestra app ‘/’ usando GET , y nuestra aplicación debería responder ‘Hola mundo’.

Con eso ya tenemos nuestra aplicación en funcionamiento, ahora debemos crear los modelos y controladores de la API que contendrán toda la lógica de nuestra api.