Google2FA es una implementación PHP del módulo de autenticación de dos factores de Google, que admite el algoritmo de contraseña de un solo uso basado en HMAC (HOTP) especificado en RFC 4226 y el algoritmo de contraseña de un solo uso basado en tiempo (TOTP) especificado en RFC 6238.
Este paquete es un puente de Laravel al paquete PHP de Google2FA.
La intención de este paquete es crear códigos QR para Google2FA y verificar los códigos escritos por el usuario. Si necesita crear códigos de respaldo/recuperación, consulte a continuación.
Si necesita crear códigos de recuperación o de respaldo para brindarles a sus usuarios una forma de recuperar una cuenta perdida, puede usar el paquete de recuperación.
Consulte el área de juegos del paquete Google2FA.
Aquí hay una aplicación de demostración que muestra cómo usar Google2FA: google2fa-example.
Puede escanear el código QR en esta (antigua) página de demostración con una aplicación Google Authenticator y ver el código cambiando (casi) en tiempo real.
Laravel | Google2FA | Google2FA-Laravel |
---|---|---|
4.2 | <= 1.0.1 | |
5.0-5.1 | <= 1.0.1 | |
5.2-10.x | >= 2.0.0 | >= 0.2.0 |
Antes de Google2FA 2.0 (Laravel 5.1), tenías que instalar pragmarx/google2fa:~1.0
, porque este paquete era a la vez un paquete de Laravel y PHP (agnóstico).
Haga clic aquí para ver la demostración del middleware:
Utilice Composer para instalarlo:
composer require pragmarx/google2fa-laravel
No tiene que hacer nada más, este paquete carga automáticamente el proveedor de servicios y crea el alias mediante la nueva función de descubrimiento automático.
Agregue el proveedor de servicios y el alias de Facade a su app/config/app.php
(Laravel 4.x) o config/app.php
(Laravel 5.x):
PragmaRXGoogle2FALaravelServiceProvider::clase,'Google2FA' => PragmaRXGoogle2FALaravelFacade::clase,
Proveedor artesanal de php: publicar --provider="PragmaRXGoogle2FALaravelServiceProvider"
utilizar Google2FA; devolver Google2FA::generateSecretKey();
$google2fa = app('pragmarx.google2fa');return $google2fa->generateSecretKey();
Este paquete tiene un middleware que le ayudará a codificar 2FA en su aplicación. Para utilizarlo sólo tienes que:
protegido $rutaMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::clase, ];
Ruta::get('/admin', function () {return view('admin.index'); })->middleware(['auth', '2fa']);
Este paquete utiliza el paquete Google2FA-QRCode; compruébelo para obtener más información sobre cómo configurar los generadores de QRCode adecuados para su caso de uso.
Hay tres disponibles: imagemagick (predeterminado), svg y eps .
Puedes cambiarlo a través de la configuración:
/* * ¿Qué backend de imagen usar para generar códigos QR? * * Admite imagemagick, svg y eps */'qrcode_image_backend' => PragmaRXGoogle2FALaravelSupportConstants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK,
O tiempo de ejecución:
Google2FA::setQRCodeBackend('svg');
Puede configurar su vista 'solicitar una contraseña única' en el archivo de configuración (config/google2fa.php):
/** * Vista de contraseña única */'view' => 'google2fa.index',
Y en la vista sólo tienes que proporcionar un formulario que contenga el input, que también es configurable:
/** * Nombre de entrada de solicitud de contraseña única */'otp_input' => 'one_time_password',
Aquí hay un ejemplo de formulario:
<form action="/google2fa/authenticate" método="POST"><input name="one_time_password" type="text"><button type="submit">Autenticar</button></form>
Por lo general, una OTP dura para siempre, hasta que el usuario cierra la sesión de su aplicación, pero, para mejorar la seguridad de la aplicación, es posible que desee volver a preguntar, solo por la OTP de Google, de vez en cuando. Entonces puedes establecer una cantidad de minutos aquí:
/*** Duración en minutos.* En caso de que necesite que a sus usuarios se les solicite una nueva contraseña única de vez en cuando.*/'lifetime' => 0, // 0 = eterna
Tenga en cuenta que esto utiliza las sesiones de Laravel en segundo plano. Si este número excede el valor establecido en config('session.lifetime')
aún se cerrará su sesión, incluso si la vida útil de su OTP no ha expirado.
Y puedes decidir si tu OTP se mantendrá activa mientras tus usuarios navegan por el sitio o no:
/** * Renovar la vida útil con cada nueva solicitud. */'keep_alive' => verdadero,
Este comando cerrará la sesión de su usuario y lo redirigirá al formulario 2FA en la siguiente solicitud:
Google2FA::cerrar sesión();
Si no desea utilizar la Fachada, puede:
utilice PragmaRXGoogle2FALaravelSupportAuthenticator; (nuevo Autenticador(solicitud()))->cerrar sesión();
A menos que necesites algo realmente sofisticado, probablemente puedas usar el middleware de aceleración de rutas de Laravel para eso:
Ruta::get('/admin', function () {return view('admin.index'); })->middleware(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// ¡la autenticación otp fue exitosa!}
También puedes utilizar un middleware sin estado:
protegido $rutaMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::clase, ];
Cuando se activa el inicio de sesión de Laravel mediante recordar, la sesión se renueva y se requiere nuevamente el código 2FA. Para resolver esto, agregue el oyente LoginViaRemember
en su AppProvidersEventServiceProvider
:
utilice IlluminateAuthEventsLogin; utilice PragmaRXGoogle2FALaravelListenersLoginViaRemember; la clase EventServiceProvider extiende ServiceProvider {protegido $escuchar = [ Iniciar sesión::clase => [ Iniciar sesiónVíaRecordar::clase, ], ];...
Se disparan los siguientes eventos:
VacíoUnaVezContraseñaRecibida
Cerrado sesión
Error de inicio de sesion
Iniciar sesiónExitoso
Contraseña única caducada
Contraseña solicitada una vez
Consulte el archivo Léame en el repositorio principal de Google2FA.
Las pruebas del paquete fueron escritas con phpspec.
Antonio Carlos Ribeiro
Google2FA tiene la licencia MIT; consulte el archivo de LICENCIA para obtener más detalles.
Las solicitudes de extracción y los problemas son más que bienvenidos.