2FA con PHP y Google Authenticator
2FA con PHP y Google Authenticator


2FA son las siglas de Two Factor Authentication y es simplemente una metodología donde convertimos un proceso de autenticación en un puzzle de n trozos.

La idea es volver más complejo un sistema de autenticación para asegurarnos que únicamente el usuario que debe acceder podrá hacerlo, aunque ya sabemos que esta tarea no es sencilla, tenemos muchas herramientas para conseguirlo, y entre ellas está 2FA.

Nosotros en este tutorial vamos a desarrollar un proceso de login 2FA con PHP y Google Authenticator donde desmontaremos el proceso en 2 partes, la primera será para requerir el email y la contraseña al usuario, y en la segunda le pediremos que lea un código QR con Google Authenticator para obtener un código y ver si es correcto.

Si el usuario introduce correctamente el email y la contraseña mostraremos un código QR formado con sus datos y el nombre de nuestra app, de esta forma podrá controlar distintas apps con el mismo email, es 100% recomendable hacerlo así.

Nosotros vamos a utilizar este package el cual aparte de tener todo lo necesario nos ofrece el método verifyCode gracias al cual podemos comprobar si los datos del usuario son correctos de forma sencilla.

Una vez hayamos leído el código Google Authenticator nos ofrecerá la siguiente pantalla donde podremos obtener el código para introducir en la app.

Instalar 2FA con Php

Lo primero que debemos hacer es instalar el package con composer.

Una vez lo hayamos registrado y lo tengamos disponible, vamos a crear una pequeña librería que nos ayudará a interactuar con él de forma más ordenada y sencilla.

Lo único que hacemos es definir propiedades de la clase, generamos la instancia de TwoFactorAuth donde le decimos el issuer, que aunque no es requerido, sí es muy recomendable.

Más abajo tenemos setters y getters para acceder y establecer nuestras propiedades y finalmente 2 métodos importantes, first_step y second_step.

El método first_step recibirá los datos POST del formulario donde tendremos el email y la contraseña, que será el siguiente.

Una vez ejecutemos este formulario contra el método first_step seremos redirigidos a otra página donde tendremos el siguiente formulario.

Cómo puedes ver, aquí estamos utilizando el método getQRCodeImageAsDataUri de TwoFactorAuth, de esta forma podemos mostrar al usuario un código QR el cual contendrá un código que por defecto será actualizado cada 30 segundos, aquí está la firma del constructor.

Por lo tanto, si ejecutas el primer formulario correctamente podrás ver el código QR, una vez leas el código con Google Authenticator podrás aparte de guardar tus credenciales para acceder más adelante obtener el código de acceso correcto.

Así de sencillo es implementar un proceso 2FA con PHP para poder hacer tan complejo como necesitemos nuestros sistemas de autenticación.

¿Te interesa aprender a trabajar con Php 7 desde 0?

Accede al curso ahora

En cursosdesarrolloweb.es tenemos cursos completos sobre desarrollo web y desarrollo móvil.

Si quieres aprender a trabajar de forma completa con Php en su última versión no dudes en visitarnos.

El curso de Php 7 parte desde 0 y va desde temas básicos hasta temas complejos como el trabajo con PHP-DI, un contenedor para manejar las dependencias o el trabajo con Doctrine, el ORM más popular para Php.