
Compartir:
Ashley es una desarrolladora web freelance de Laravel a la que le encanta contribuir a proyectos de código abierto, construir sistemas emocionantes y ayudar a otros a aprender sobre desarrollo web.
Integración de autenticación de dos factores en Laravel con Vonage
Tiempo de lectura: 16 minutos
Introducción
La autenticación de dos factores (2FA) es una parte importante de cualquier aplicación que requiera que un usuario inicie sesión. Añade una capa adicional de seguridad que puede ayudar a evitar accesos no autorizados y proteger los datos de tus usuarios.
En este artículo, vamos a echar un vistazo a cómo podemos agregar 2FA a nuestra aplicación Laravel usando la Verify API de Vonage. También discutiremos los beneficios de 2FA y cómo puede ayudar a dar a tus usuarios más confianza en tu aplicación.
¿Qué es la 2FA?
2FA es un método de autenticación que requiere que el usuario proporcione dos datos (o factores) para verificar su identidad. Estos factores suelen pertenecer a una de las siguientes categorías:
Algo que sabes - Cosas como una contraseña o un número de identificación personal (PIN).
Algo que usted tiene - Algo como un token generado por un dispositivo físico (como un teclado PIN o un teléfono) o una YubiKey.
Algo que usted es - Puede ser información biométrica como una huella dactilar o un reconocimiento facial.
En qué lugar se encuentra - Puede tratarse de una ubicación, como una dirección IP concreta o unas coordenadas GPS. Es posible que hayas visto esto en acción cuando has intentado iniciar sesión en cuentas en línea desde una ubicación diferente a la habitual.
Algo que usted hace - Puede ser un gesto o una acción que sólo tú conozcas (como los movimientos del ratón en la página).
Las formas más habituales de 2FA con las que te encontrarás al iniciar sesión en una aplicación web son "algo que sabes" y "algo que tienes". Por ejemplo, se te puede pedir que introduzcas tu correo electrónico y tu contraseña (algo que sabes) y que después introduzcas un código que se envía a tu teléfono o que genera tu teléfono (algo que tienes).
Para el resto de este artículo, nos concentraremos en las categorías "algo que sabes" y "algo que tienes". Utilizaremos la Verify API de Vonage para implementar la parte de "algo que tienes" del proceso de 2FA.
Ventajas del uso de 2FA
Ahora que entendemos mejor qué es la 2FA, veamos las ventajas que aporta tanto al usuario como al propietario de la aplicación.
Reduzca la posibilidad de que se apropien de su Account
Al ofrecer al usuario la posibilidad de activar la 2FA para su cuenta, se reduce la posibilidad de que un actor malintencionado acceda a su cuenta.
Las listas de contraseñas filtradas en filtraciones de datos pueden encontrarse en Internet con relativa facilidad. Estas listas pueden ser utilizadas por usuarios malintencionados para intentar acceder a cuentas de otros servicios que puedan estar utilizando la misma contraseña. Por ejemplo, imaginemos un usuario que tiene una cuenta en el "Sitio Web A" y en el "Sitio Web B" y que ambas cuentas utilizan la misma contraseña. Si se produce una filtración de datos en el "Sitio Web A" y se filtra la contraseña del usuario, un pirata informático puede intentar utilizar la misma contraseña para acceder a la cuenta del usuario en el "Sitio Web B". Sin 2FA, el hacker podría acceder a la cuenta del usuario en el "Sitio Web B" y potencialmente causar daños. Esto podría ser cualquier cosa, desde cambiar la contraseña del usuario, borrar la cuenta por completo, o incluso hacer compras en nombre del usuario.
También podría ocurrir algo similar si un usuario utilizara una contraseña débil o fácil de adivinar.
Por lo tanto, activando 2FA, el usuario podría evitar que esto ocurriera. Si el usuario malintencionado tuviera que introducir un código enviado a su teléfono, también necesitaría tener acceso al teléfono del usuario para acceder a su cuenta.
Como ventaja para el propietario de la aplicación, esto también puede reducir el número de solicitudes de asistencia que recibe de los usuarios cuyas cuentas se han visto comprometidas.
Mejorar la confianza
Como resultado de la implementación de 2FA en sus aplicaciones, puede mostrar a sus usuarios que usted toma en serio su seguridad. Esto puede ayudar a crear un nivel de confianza en su aplicación que puede conducir a más ventas y conversiones.
Reducir la actividad fraudulenta de los usuarios y las inscripciones
Si utiliza 2FA como parte de un proceso de verificación o registro, puede ayudar a reducir la cantidad de actividad fraudulenta que recibe.
Por ejemplo, puede pedir a los usuarios que faciliten un número de teléfono al registrarse. A continuación, puede enviar un código de verificación al usuario por SMS y pedirle que lo introduzca en su aplicación para demostrar que tiene acceso al número de teléfono indicado. Esto podría ayudar a reducir el número de cuentas falsas que se crean.
Sin embargo, es importante recordar que esto no elimina por completo el riesgo de que se creen cuentas falsas. Sólo pone un obstáculo para dificultar a los usuarios malintencionados la creación de cuentas falsas. Si se configurara un bot para crear cuentas, un actor malintencionado podría comprar un banco de números de teléfono y utilizarlos para crear cuentas.
¿Qué es Verify API de Vonage?
Vonage es una plataforma de comunicaciones que ofrece una serie de API que puedes utilizar para crear tu aplicación. Ofrecen API para enviar y recibir mensajes SMS, enviar mensajes de WhatsApp, realizar llamadas telefónicas y mucho más.
Una de las API que ofrecen es la "Verify API". Esta API permite enviar un código de verificación a un usuario a través de mensajes SMS, llamadas telefónicas, mensajes de WhatsApp y correos electrónicos. También ofrece la funcionalidad de comprobar que el código que introduce un usuario es válido.
Usar Verify API es una gran manera de añadir 2FA a tu aplicación Laravel porque elimina la necesidad de que construyas algunas de las funcionalidades tú mismo. Por ejemplo, proporcionan la capacidad de construir flujos de trabajo automatizados (que cubriremos en más profundidad más adelante) y manejar cosas como la detección de fraude, la caducidad automática del código, y el envío real de mensajes SMS, mensajes de WhatsApp, correos electrónicos y llamadas telefónicas.
Si desea más información sobre Verify API, puede consultar la documentación completa aquí: https://developer.vonage.com/en/verify/overview
Verify Flows de Vonage
Verify API de Vonage ofrece varios canales que puedes usar para enviar los códigos de verificación 2FA a tus usuarios. Al momento de escribir este artículo, están disponibles los siguientes canales:
SMS
Llamada de voz
Correo electrónico
WhatsApp
WhatsApp (sin código)
La función "WhatsApp (sin código)" envía un botón "Sí" o "No" al usuario a través de WhatsApp. Esto permite al usuario autenticarse sin necesidad de recordar o introducir un código.
Verify API de Vonage te permite crear flujos de trabajo de verificación. Estos te permiten crear un conjunto de canales a los que Vonage debe intentar enviar el código de verificación. Por ejemplo, podrías crear un flujo de trabajo que envíe el código a través de SMS y luego, si el usuario no usa el código dentro de un plazo determinado (como 5 minutos), podría enviarse a través de una llamada telefónica. Esta función en particular puede ser útil si el usuario no tiene red en su teléfono (y por lo tanto no puede recibir el mensaje SMS), pero tiene acceso a Internet para poder recibir correos electrónicos y mensajes de WhatsApp como alternativa.
He aquí algunos ejemplos de flujos de trabajo que puede utilizar (suponiendo que haya un intervalo de 5 minutos entre cada envío al canal siguiente):
SMS -> SMS -> SMS
SMS -> Llamada de voz -> SMS
SMS -> WhatsApp
Correo electrónico
Llamada de Voz -> Llamada de Voz -> Llamada de Voz
Añadir 2FA a su aplicación Laravel
Ahora que tenemos una comprensión de lo que es Verify API, echemos un vistazo a cómo usarlo para añadir 2FA a nuestras aplicaciones Laravel.
Nuestro flujo será el siguiente:
Enviar un código de verificación al usuario por SMS
Permite al usuario introducir el código en la aplicación.
Si el usuario no ha introducido el código en cinco minutos, envíale el código a través de una llamada telefónica.
Haremos las siguientes suposiciones:
Vamos a interactuar con un
phone_numberque existe en la tablauserstabla. El campo será obligatorio y contendrá los números de teléfono de los usuarios. Para que podamos centrarnos únicamente en el flujo de Verify API, no veremos cómo añadir este campo a la base de datos.Asumiremos que 2FA está permanentemente activado para cada usuario en la aplicación.
Cómo crear tu Account de Vonage
Antes de comenzar a escribir cualquier código, primero necesitaremos obtener nuestras claves API de Vonage. Puedes hacerlo registrándote en una Account de Vonage si aún no tienes una.
<sign-up>
Tendrás que guardar tu clave API y tu secreto API para que podamos añadirlos a nuestra aplicación Laravel.
Instalación del SDK de Vonage
Ahora que tenemos nuestras claves API, podemos instalar el paquete Laravel de Vonage que utilizaremos para interactuar con Verify API. Podemos hacerlo a través de Composer ejecutando el siguiente comando en la raíz de nuestro proyecto:
composer require vonage/vonage-laravelEl paquete ya debería estar instalado. Una vez hecho esto, podemos añadir nuestra clave y secreto de API a nuestro archivo .env archivo:
Creación de la clase de servicio
Empecemos creando una nueva clase que utilizaremos para interactuar con la Verify API. Llamaremos a esta clase TwoFactorAuthService y la almacenaremos en el directorio app/Services directorio.
Añadiremos dos métodos a esta clase:
sendVerification- Se utilizará para enviar el código de verificación al usuario.verify- Se utilizará para comprobar que el código introducido por el usuario es correcto.
La clase puede tener este aspecto:
declare(strict_types=1);
namespace App\Services;
use App\Models\User;
use Exception;
use Vonage\Client;
use Vonage\Verify2\Request\SMSRequest;
use Vonage\Verify2\VerifyObjects\VerificationWorkflow;
final class TwoFactorAuthService
{
public function sendVerification(User $user): string
{
$smsRequest = (new SMSRequest(
to: $user->phone_number,
brand: 'Vonage Verify',
));
$voiceWorkflow = new VerificationWorkflow(
channel: VerificationWorkflow::WORKFLOW_VOICE,
to: $user->phone_number,
);
$smsRequest->addWorkflow($voiceWorkflow);
$result = app(Client::class)
->verify2()
->startVerification($smsRequest);
return $result['request_id'];
}
public function verify(string $code, string $requestId): bool
{
try {
return app(Client::class)
->verify2()
->check($requestId, $code);
} catch (Exception) {
return false;
}
}
}
Analicemos un poco más a fondo lo que ocurre en esta clase.
El método sendVerification acepta una instancia de User como argumento. Este es el usuario que está intentando autenticarse usando 2FA. En este método, estamos creando un flujo de trabajo que enviará el código de verificación al usuario a través de SMS y luego una llamada telefónica (si el usuario no utiliza el código dentro de un plazo determinado). A continuación, utilizaremos el SDK de Vonage para enviar el código de verificación al usuario. El método startVerification devuelve un array que contiene un campo request_id campo. Este campo se utilizará para identificar el flujo del usuario y verificar que el código que ingresó el usuario sea correcto. Utilizaremos este ID dentro de un controlador (que veremos más adelante), por lo que devolveremos el campo request_id de este método.
El método verify acepta un parámetro code que es el código que el usuario introdujo al intentar autenticarse usando 2FA. También acepta un parámetro requestId parámetro. Este será normalmente el ID de la petición que fue devuelto por el método sendVerification método. Si el código introducido por el usuario es correcto, el método check devolverá true. Si el código es incorrecto, lanzará una excepción, así que la capturaremos y devolveremos false para denegar el acceso al usuario.
Creación del middleware
Ahora que tenemos nuestra clase para construir nuestro flujo de trabajo e interactuar con la Verify API, querremos crear dos clases de middleware:
VerifyTwoFactorAuth- Este middleware se utilizará para proteger las rutas de nuestra aplicación. Si el usuario aún no ha introducido su código 2FA, será redirigido a la página de verificación 2FA.PreventRequestsIfTwoFactorAuthVerified- Este middleware impedirá que el usuario pueda acceder a la página de verificación 2FA si ya ha introducido su código 2FA.
Empecemos por crear el VerifyTwoFactorAuth middleware. Haremos esto ejecutando el siguiente comando en la raíz de nuestro proyecto:
php artisan make:middleware VerifyTwoFactorAuthAhora debería tener una nueva clase VerifyTwoFactorAuth en el directorio app/Http/Middleware directorio. Vamos a actualizar esta clase y luego vamos a echar un vistazo a lo que está sucediendo:
declare(strict_types=1);
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
final class VerifyTwoFactorAuth
{
public function handle(Request $request, Closure $next): Response
{
if ($this->shouldRedirectToTwoFactorAuthPage($request)) {
return redirect()->route('auth.2fa.show');
}
return $next($request);
}
private function shouldRedirectToTwoFactorAuthPage(Request $request): bool
{
return !$request->session()->has('two_factor_auth_verified')
&& $request->route()->getName() !== 'auth.2fa.show'
&& $request->route()->getName() !== 'auth.2fa.verify';
}
}
En el método handle comprobamos si el usuario ha sido verificado usando 2FA. Para ello, comprobamos si la two_factor_auth_verified existe en la sesión del usuario. Si existe, permitiremos al usuario continuar como se espera. Si no, redirigiremos al usuario a la página de verificación 2FA, a menos que ya esté en esa página o enviando el formulario de verificación 2FA.
Ahora podemos utilizar este middleware para proteger las rutas de nuestra aplicación. Por ejemplo, nuestro archivo routes/web.php puede tener este aspecto:
use App\Http\Controllers\ProfileController;
use App\Http\Middleware\VerifyTwoFactorAuth;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth', VerifyTwoFactorAuth::class])->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
Las tres rutas del ejemplo anterior requerirán ahora que el usuario esté autenticado y haya verificado su código 2FA antes de poder acceder a ellas.
También necesitaremos crear un PreventRequestsIfTwoFactorAuthVerified middleware. Este se utilizará para evitar que el usuario navegue a la pantalla de verificación 2FA si ya está verificado. Crearemos este middleware ejecutando el siguiente comando:
php artisan make:middleware PreventRequestsIfTwoFactorAuthVerifiedAhora debería tener una nueva clase PreventRequestsIfTwoFactorAuthVerified en el directorio app/Http/Middleware directorio. Vamos a actualizar esta clase y luego vamos a echar un vistazo a lo que está sucediendo:
declare(strict_types=1);
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
final class PreventRequestsIfTwoFactorAuthVerified
{
public function handle(Request $request, Closure $next): Response
{
// If we have already verified the user's 2FA code, redirect them to the dashboard.
// We don't want to keep allowing them to access the 2FA verification page.
if ($request->session()->get('two_factor_auth_verified')) {
return redirect()->route('dashboard');
}
return $next($request);
}
}
Como podemos ver en la clase anterior, estamos comprobando si el usuario ya ha verificado su 2FA comprobando la existencia de la clave two_factor_auth_verified en la sesión del usuario. Si esa clave existe, significa que el usuario ya ha verificado su código 2FA, por lo que le redirigiremos al panel de control para que no pueda acceder a la página de verificación 2FA. Si no, permitiremos al usuario continuar como se esperaba.
Ya está. Ahora tenemos nuestro middleware preparado y listo para usar. Cubriremos cómo usar este middleware en particular en la siguiente sección cuando creemos el controlador de verificación 2FA y las rutas.
Creación del controlador y las rutas
Ahora que tenemos nuestra clase de servicio y middleware listo, es el momento de pegar todo junto con un controlador y algunas rutas.
Empezaremos creando dos nuevas rutas para nuestro proceso de verificación 2FA:
GET /auth/2fa- Esta ruta se utilizará para mostrar el formulario de verificación 2FA.POST /auth/2fa- Esta ruta se utilizará cuando el usuario envíe el formulario para verificar su código 2FA.
Para ello, añadiremos lo siguiente a nuestro archivo routes/web.php archivo:
use App\Http\Controllers\Auth\TwoFactorAuthController;
use App\Http\Middleware\PreventRequestsIfTwoFactorAuthVerified;
use App\Http\Middleware\VerifyTwoFactorAuth;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth', VerifyTwoFactorAuth::class])->group(function () {
// ...
Route::controller(TwoFactorAuthController::class)->middleware(PreventRequestsIfTwoFactorAuthVerified::class)->group(function () {
Route::get('/auth/2fa', 'show')->name('auth.2fa.show');
Route::post('/auth/2fa', 'verify')->name('auth.2fa.verify');
});
});
Habrás notado que estamos usando el middleware PreventRequestsIfTwoFactorAuthVerified (que creamos anteriormente) en el grupo TwoFactorAuthController grupo.
Ahora podemos crear la ruta TwoFactorAuthController (que estamos referenciando en estas dos rutas) ejecutando el siguiente comando:
php artisan make:controller Auth/TwoFactorAuthControllerAhora debería tener una nueva clase TwoFactorAuthController en el directorio app/Http/Controllers/Auth directorio. Vamos a actualizar esta clase y luego vamos a echar un vistazo a lo que está sucediendo:
declare(strict_types=1);
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Services\TwoFactorAuthService;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
final class TwoFactorAuthController extends Controller
{
/**
* Show the two-factor authentication page.
*/
public function show(Request $request, TwoFactorAuthService $twoFactorAuthService): View
{
// If the user hasn't already started the verification process, start it.
// We check this here to prevent the user re-triggering the 2FA process
// if the page is refreshed.
if (! $request->session()->has('two_factor_auth_request_id')) {
$requestId = $twoFactorAuthService->sendVerification($request->user());
$request->session()->put('two_factor_auth_request_id', $requestId);
}
return view('auth.two-factor-auth');
}
/**
* Verify the two-factor authentication code entered by the user.
*/
public function verify(Request $request, TwoFactorAuthService $twoFactorAuthService): RedirectResponse
{
$validated = $request->validate([
'two_factor_auth_code' => ['required', 'numeric'],
]);
$isValidCode = $twoFactorAuthService->verify(
code: $validated['two_factor_auth_code'],
requestId: $request->session()->get('two_factor_auth_request_id')
);
if (! $isValidCode) {
return back()->withErrors([
'two_factor_auth_code' => 'The code you entered was invalid.',
]);
}
$request->session()->put('two_factor_auth_verified', true);
return redirect()->route('dashboard');
}
}
En el método show comprobamos si el usuario ya ha iniciado el proceso de verificación 2FA. Para ello, comprobamos la existencia de un campo two_factor_auth_request_id en la sesión del usuario. Este campo contendrá el ID de la petición que es devuelto por el método sendVerification en el campo TwoFactorAuthService. Si el campo no existe, iniciaremos el proceso de verificación (envío del código mediante SMS y llamada telefónica) llamando al método sendVerification y almacenando el ID de solicitud en la sesión. Si el usuario ya ha iniciado el proceso de verificación, continuaremos normalmente con el formulario de verificación 2FA. Esto se manejará si el usuario refresca la página o navega fuera de la página y luego vuelve a ella.
En el método verify realizamos una validación básica para asegurarnos de que un campo two_factor_auth_code en la solicitud. A continuación, utilizamos el código introducido por el usuario y el campo two_factor_auth_request_id de la sesión del usuario para verificar el código utilizando el método verify en el método TwoFactorAuthService. Esto enviará una solicitud a la Verify API para asegurarse de que el código es válido. Si el código es válido, almacenaremos un campo two_factor_auth_verified en la sesión del usuario para indicar que el usuario ha verificado su código 2FA. Esto evitará que el usuario sea redirigido al formulario de verificación 2FA en cada solicitud posterior. Si el código no es válido, redirigiremos al usuario al formulario de verificación 2FA con un mensaje de error.
Creación del formulario
En el show del método TwoFactorAuthControllerdevolvemos una auth.two-factor-auth al usuario. Esta vista contendrá el formulario que el usuario utilizará para introducir su código 2FA.
Para el propósito de esta guía, crearemos un formulario simple que no contenga ningún estilo. La vista Blade puede tener este aspecto:
<form method="POST" action="{{ route('auth.2fa.verify') }}">
@csrf
<!-- Two-factor Auth Code -->
<div>
<label for="two_factor_auth_code">Two Factor Auth Code')</label>
<input id="two_factor_auth_code" type="text" name="two_factor_auth_code" required autofocus />
@if ($errors->get('two_factor_auth_code'))
<ul>
@foreach ((array) $errors->get('two_factor_auth_code') as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
</div>
<button type="submit">Verify</button>
</form>
Como podemos ver en la vista Blade de arriba, hemos añadido un único campo de entrada de texto two_factor_auth_code etiqueta y un botón de envío. También hemos añadido una condición y un bucle que mostrará cualquier mensaje de error que queramos mostrar al usuario (por ejemplo, si introduce un código no válido).
Ya está. ¡Ahora deberías tener una implementación 2FA completamente funcional en tu aplicación Laravel!
Más allá
Ahora que ya sabemos cómo implementar 2FA en nuestras aplicaciones Laravel, veamos cómo podemos llevar esta funcionalidad más allá para aportar más valor.
Añadir un conmutador para activar/desactivar 2FA
En esta guía, hemos asumido que todos los usuarios tendrán 2FA activado y se les pedirá que introduzcan un código cada vez que inicien sesión. Sin embargo, es posible que desee dar a sus usuarios la opción de activar y desactivar 2FA en sus cuentas para que puedan elegir si quieren usarlo. Aunque, si usted proporciona esta funcionalidad, es posible que desee considerar la adición de un aviso o advertencia a su interfaz de usuario para que sus usuarios sean conscientes de las implicaciones de seguridad de la desactivación de 2FA.
Además de esto, también puede ofrecer a los usuarios la posibilidad de elegir los canales de envío de los códigos 2FA. Por ejemplo, pueden querer recibir los códigos a través de SMS y llamadas de Voice. O puede que sólo quieran recibirlos por correo electrónico y WhatsApp.
Esta flexibilidad permitirá a los usuarios crear un flujo de trabajo de autenticación que les resulte útil y que encuentre un equilibrio entre seguridad y comodidad.
Añadir reenvío amistoso
En nuestros ejemplos anteriores, hemos programado que el usuario siempre sea redirigido al panel de control después de haber verificado correctamente su código 2FA. Sin embargo, es posible que desee proporcionar una función de "reenvío amigable" que redirija al usuario a la página a la que intentaba acceder originalmente.
Por ejemplo, si el usuario estaba intentando navegar directamente a "https://my-app.com/orders", podría implementar un reenvío amigable para que sea redirigido a esa página después de haber verificado correctamente su código 2FA.
Verificación periódica de 2FA
En esta guía, sólo hemos implementado 2FA para el proceso de inicio de sesión. Sin embargo, dependiendo de la aplicación que estés construyendo, puede que quieras re-verificar periódicamente el código 2FA del usuario. Por ejemplo, puede que quieras que el usuario introduzca un nuevo código cada hora. Esto puede ayudar a proteger la cuenta del usuario si su dispositivo se ve comprometido o si accidentalmente permanece conectado en un ordenador público (como en una biblioteca o cafetería).
Además, es posible que también desee pedir al usuario su contraseña o código 2FA antes de que puedan realizar algunas acciones. Por ejemplo, antes de permitir que un usuario elimine su cuenta o cambie su dirección de correo electrónico. Esto ayudará a evitar que usuarios malintencionados realicen acciones potencialmente destructivas si consiguen acceder a una cuenta.
Ofrezca una opción de reserva
Si añade una función 2FA a su aplicación, puede que también quiera proporcionar una opción de copia de seguridad para que los usuarios puedan acceder a sus cuentas en caso de emergencia. Por ejemplo, un usuario puede perder su teléfono o sufrir un robo. Como resultado, es posible que ya no pueda acceder a su cuenta.
Por esta razón, una opción común de copia de seguridad es permitir a los usuarios descargar una lista de códigos de recuperación que se generan cuando activan 2FA para su cuenta. Estos códigos de recuperación suelen ser de un solo uso y pueden utilizarse para acceder a la cuenta del usuario sin tener que introducir un código 2FA. Si decide generar estos códigos, recuerde que deben ser criptográficamente seguros para que no puedan ser fácilmente adivinados o forzados.
Conclusión
Esperamos que esta guía te haya dado una idea de cómo usar Vonage Verify API para implementar 2FA en tus aplicaciones Laravel. También debería haber resaltado algunos de los beneficios de usar 2FA y cómo puede ayudarte a ti y a tus usuarios.