La autenticación multifactor combina dos credenciales independientes: lo que sabe el usuario (contraseña), lo que tiene el usuario (token de seguridad). Muchas veces es necesario implementarlo en nuestras aplicaciones para incrementar la seguridad de la misma, en este post te mostraremos como implementar autenticación multifactor de manera muy sencilla y desde cero, utilizaremos NodeJS y para el auth usaremos la app de Google Authenticator para la autenticación multifactor.
Creación de API
const express = require('express'); const bodyParser = require('body-parser'); const speakeasy = require('speakeasy'); const QRCode = require('qrcode'); const app = express(); const port = "8900"; app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());
app.listen(port, ()=>{ console.log('server listening on port '+ port) })
Registro y generación de QR
Lo primero es generar un QR y un código para que Google Authenticator reconozca nuestro login, esto se hace de manera muy sencilla:
app.get('/register', (req, res) => { const secret = speakeasy.generateSecret(); QRCode.toDataURL(secret.otpauth_url, (err, dataUrl) => { if(err || !dataUrl) return reject(err) res.json({ secret: secret.base32, qrCode: dataUrl}) }); })
Esto nos devuelve algo como esto:
{ secret: <code> qrCode: <img-qr> }
Verificar token
Ahora solo nos queda verificar los token de google, para eso tendremos otro endpoint que se encargara de ellos.
app.get("/validate/:token/:secret", (req, res) => { const { token, secret } = req.params; const tokenValidates = speakeasy.totp.verify({ secret, encoding: 'base32', token }); res.json( tokenValidates ); })
Este endpoint nos regresará un True si el token enviado es valido y un False si el token es invalido.
Puntos a considerar
- El secret code es necesario almacenarlo para casa usuario de tu base de datos ya que cada que se valida un token es necesario tener el token a la mano.
- Para implementaciones más concretas aquí esta la documentación https://www.npmjs.com/package/speakeasy
Este articulo puede interesarle loT y la seguridad del home office