jueves, 25 de junio de 2020

Sistemas de Logeo

Sistemas de Logeo

Paquete passport:
Para un acceso seguro a nuestra aplicación tenemos tres mecanismos:
  • Mediante claves cifradas a traves de SSL
  • Encriptando la clave en el servidor con el algoritmo MD5
  • Con las variables de sesión  protegiendo las rutas de los usuarios no logeados

El paquete passport se encargara de las variables de sesión y de las rutas para los usuarios logeados.
Vamos a hacer uso de dos paquetes:
  • passport :  Acceso al sistema de seguridad.
  • passport-local : Permite crear la estrategia local, encriptacion local y md5 donde podemos indicar las rutas limitadas a los intrusos.


Instalamos los siguientes paquetes en el package.json:
 
npm install passport
npm install passport-local


Definimos la estrategia local:
Vamos a simular el acceso a datos con un array de usuarios en forma JSON con tres campos:
  • nombre : nombre completo
  • nombreUsuario : nick
  • password : clave
Tenemos el modulo passport-local que tiene la clase Strategy
Creamos una instancia sobre el
 
var EstrategiaLogin = require(‘passport-local’).Strategy;
var nuestraEstrategia =EstrategiaLogin(logeo);

despues le pasamos el objeto logeo con nombre del usuario y la clave y una funcion de callback que nos devuelve:

callback devolución de tres parametros:
  • Parametros de error si ocurren
  • Devolución de un objeto en caso autentificación correcta o un booleano false si en caso contrario
  • Devolucion de un JSON en caso de autentificacion falsa con un mensaje
Definimos la estrategia de logeo:

var EstrategiaLogin = require(‘passport-local).Strategy;
function logueo(nombre, password, callback) {
//llamada a la base de datos y obtencion del objeto
 getBaseDatos(nombre, function(err,usuario)
   if (err) {
               return callback(err)
             }
if (¡usuario){
          return callback(null,false,{mensaje: mensajeJSON})
}
if (usuario.passport == passport){
    return callback(null,usuario,null);
}else{
    return callback(null,false,{mensaje: ‘Las claves no coinciden’})
}
}

var estrategia = new EstrategiaLogin(logeo);


var passport  = require(‘passport’);
var session = require(‘cookie-session);
passport.use(estrategia);


passport.serializeUser(serializaUsuario) {



//serializeUser determina qué datos del objeto de usuario deben almacenarse en la sesión.



function serializaUsuario(usuario,callback)

{

    callback(null,usuario.nombreUsuario)

}

}

//req.session.passport.usuario = {nombreUsuario: 'juan'}

passport.deserializeUser(deserializaUsuario)

 

   function deserializaUsuario(nombreUsuario,callback)

{

  usuarioBD(nombreUsuario,function(err,usuario){

    if (err){

       return callback(err)

   }else{

      return callback(null,usuario);

   }

});   

      }



  //el objeto de usuario se adjunta a la solicitud como req.usuario


Encriptamos las variables de sessión e insertamos el middleware en app:

app.use(session ({secret : 'clave'}));


Inicializamos el passport:

app.use(passport.initialize());


Damos permiso a passport para que modifice las variables de sessión:

app.use(passport.session());


Uso de passport:

app.post('/login', passport.authenticate('local',

    { failureRedirect: '/fallo' }), function (req, res) {

        //estrategia a emplear despues de un usuario logeado

    });


Proteccion de las rutas:

function loginMiddleware(req, res, callback) {       

        if (req.isAuthenticated()) {

            return callback(req, res);  //Si el cliente esta autentificado

        } else {           

            res.redirect('/login'); //Nos devuelve a la pagina de logeo

        }

    }



No hay comentarios:

Publicar un comentario