🔐 ¿Qué aprenderás?
En este tutorial, te mostraré cómo agregar la autenticación de dos factores (2FA) en tu aplicación PHP para mejorar la seguridad. Implementaremos Google Authenticator para generar los códigos temporales que los usuarios deberán ingresar junto con sus contraseñas.
⚙️ Requisitos:
- Servidor con soporte PHP.
- Aplicación Google Authenticator instalada en tu dispositivo móvil.
- Librería PHPGangsta/GoogleAuthenticator para generar y verificar códigos 2FA.
📥 Instalación de la Librería GoogleAuthenticator
Para comenzar, instala la librería PHP para Google Authenticator usando Composer:
composer require phpgangsta/googleauthenticator
🛠️ Código PHP para Generar el Secreto 2FA
<?php
require 'vendor/autoload.php';
use PHPGangsta_GoogleAuthenticator;
$ga = new PHPGangsta_GoogleAuthenticator();
$secret = $ga->createSecret(); // Generar un secreto aleatorio
// Mostrar el código QR para Google Authenticator
$qrCodeUrl = $ga->getQRCodeGoogleUrl('TuSitioWeb', $secret);
echo "Escanea el siguiente código QR con la aplicación Google Authenticator: <br>";
echo "<img src='$qrCodeUrl' />";
echo "<br><br>El secreto es: $secret";
?>
Este código genera un secreto único que se mostrará al usuario para ser escaneado con Google Authenticator.
🔒 Verificar el Código de Autenticación
Una vez que el usuario haya escaneado el código QR y tenga el código temporal en la aplicación Google Authenticator, debe ingresarlo en tu formulario para verificarlo.
<?php
if (isset($_POST['codigo'])) {
$codigoUsuario = $_POST['codigo'];
$secret = 'TU_SECRETO'; // El secreto almacenado previamente
$ga = new PHPGangsta_GoogleAuthenticator();
$valido = $ga->verifyCode($secret, $codigoUsuario, 2); // 2 es el margen de tiempo permitido para el código
if ($valido) {
echo "<p>Autenticación exitosa. Bienvenido!</p>";
} else {
echo "<p>Código incorrecto. Intenta de nuevo.</p>";
}
}
?>
<form method="POST">
<label>Introduce el código de Google Authenticator:</label>
<input type="text" name="codigo" required><br><br>
<input type="submit" value="Verificar">
</form>
Este código permite a los usuarios ingresar el código generado por Google Authenticator para completar la autenticación de dos factores.
⚠️ Notas adicionales:
- Google Authenticator genera códigos temporales que se sincronizan con el tiempo.
- Asegúrate de almacenar el secreto en un lugar seguro (como en la base de datos asociada al usuario) para poder verificarlo más tarde.
- Puedes implementar un límite de intentos para evitar ataques de fuerza bruta.