Google2FA ist eine PHP-Implementierung des Google Two-Factor Authentication Module, die den in RFC 4226 spezifizierten HMAC-Based One-Time Password (HOTP)-Algorithmus und den in RFC 6238 spezifizierten Time-based One-time Password (TOTP)-Algorithmus unterstützt.
Dieses Paket ist eine Laravel-Brücke zum PHP-Paket von Google2FA.
Der Zweck dieses Pakets besteht darin, QRCodes für Google2FA zu erstellen und vom Benutzer eingegebene Codes zu überprüfen. Wenn Sie Sicherungs-/Wiederherstellungscodes erstellen müssen, überprüfen Sie bitte unten.
Wenn Sie Wiederherstellungs- oder Sicherungscodes erstellen müssen, um Ihren Benutzern die Möglichkeit zu geben, ein verlorenes Konto wiederherzustellen, können Sie das Wiederherstellungspaket verwenden.
Bitte überprüfen Sie den Google2FA-Paket-Playground.
Hier ist eine Demo-App, die die Verwendung von Google2FA zeigt: google2fa-example.
Sie können den QR-Code auf dieser (alten) Demoseite mit einer Google Authenticator-App scannen und die Codeänderung (fast) in Echtzeit verfolgen.
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 |
Vor Google2FA 2.0 (Laravel 5.1) müssen Sie pragmarx/google2fa:~1.0
installieren, da dieses Paket sowohl ein Laravel-Paket als auch ein PHP (agnostisch) war.
Klicken Sie hier, um die Middleware-Demo anzusehen:
Verwenden Sie Composer, um es zu installieren:
composer require pragmarx/google2fa-laravel
Sie müssen nichts weiter tun, dieses Paket lädt den Dienstanbieter automatisch und erstellt den Alias mithilfe der neuen Funktion zur automatischen Erkennung.
Fügen Sie den Service Provider und den Facade-Alias zu Ihrer app/config/app.php
(Laravel 4.x) oder config/app.php
(Laravel 5.x) hinzu:
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
PHP-Artist-Anbieter:publish --provider="PragmaRXGoogle2FALaravelServiceProvider"
use Google2FA;return Google2FA::generateSecretKey();
$google2fa = app('pragmarx.google2fa');return $google2fa->generateSecretKey();
Dieses Paket enthält eine Middleware, die Ihnen beim Codieren von 2FA in Ihrer App hilft. Um es zu verwenden, müssen Sie nur:
protected $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::class, ];
Route::get('/admin', function () {return view('admin.index'); })->middleware(['auth', '2fa']);
Dieses Paket verwendet das Google2FA-QRCode-Paket. Weitere Informationen zum Konfigurieren der richtigen QRCode-Generatoren für Ihren Anwendungsfall finden Sie darin.
Es stehen drei zur Verfügung: imagemagick (Standard), SVG und EPS .
Sie können es über die Konfiguration ändern:
/* * Welches Bild-Backend soll zum Generieren von QR-Codes verwendet werden? * * Unterstützt imagemagick, svg und eps */'qrcode_image_backend' => PragmaRXGoogle2FALaravelSupportConstants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK,
Oder Laufzeit:
Google2FA::setQRCodeBackend('svg');
Sie können die Ansicht „Nach einem Einmalpasswort fragen“ in der Konfigurationsdatei (config/google2fa.php) festlegen:
/** * Einmalpasswortansicht */'view' => 'google2fa.index',
Und in der Ansicht müssen Sie lediglich ein Formular mit der Eingabe bereitstellen, das ebenfalls konfigurierbar ist:
/** * Eingabename für Einmalpasswortanforderung */'otp_input' => 'one_time_password',
Hier ist ein Formularbeispiel:
<form action="/google2fa/authenticate" method="POST"><input name="one_time_password" type="text"><button type="submit">Authentifizieren</button></form>
Normalerweise bleibt ein OTP ewig bestehen, bis sich der Benutzer von Ihrer App abmeldet. Um die Anwendungssicherheit zu verbessern, möchten Sie jedoch möglicherweise von Zeit zu Zeit erneut nach dem OTP von Google fragen. Hier können Sie also die Anzahl der Minuten festlegen:
/*** Lebensdauer in Minuten.* Falls Sie möchten, dass Ihre Benutzer von Zeit zu Zeit nach neuen Einmalpasswörtern gefragt werden.*/'lifetime' => 0, // 0 = ewig
Beachten Sie, dass hierbei die Laravel-Sitzungen im Hintergrund verwendet werden. Wenn diese Zahl den in config('session.lifetime')
festgelegten Wert überschreitet, werden Sie trotzdem abgemeldet, auch wenn Ihre OTP-Lebensdauer noch nicht abgelaufen ist.
Und Sie können entscheiden, ob Ihr OTP aktiv bleibt, während Ihre Benutzer auf der Website surfen, oder nicht:
/** * Lebenszeit bei jeder neuen Anfrage verlängern. */'keep_alive' => true,
Mit diesem Befehl wird Ihr Benutzer abgemeldet und bei der nächsten Anfrage zum 2FA-Formular weitergeleitet:
Google2FA::logout();
Wenn Sie die Fassade nicht nutzen möchten, können Sie:
verwenden Sie PragmaRXGoogle2FALaravelSupportAuthenticator; (new Authenticator(request()))->logout();
Sofern Sie nicht etwas wirklich Ausgefallenes benötigen, können Sie dafür wahrscheinlich die Route Throttle-Middleware von Laravel verwenden:
Route::get('/admin', function () {return view('admin.index'); })->middleware(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// otp Auth Success!}
Sie können auch eine zustandslose Middleware verwenden:
protected $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::class, ];
Wenn die Laravel-Anmeldung per Merken aktiviert ist, wird die Sitzung erneuert und der 2FA-Code ist erneut erforderlich. Um dieses Problem zu lösen, fügen Sie den LoginViaRemember
-Listener in Ihrem AppProvidersEventServiceProvider
hinzu:
verwenden Sie IlluminateAuthEventsLogin; verwenden Sie PragmaRXGoogle2FALaravelListenersLoginViaRemember; die Klasse EventServiceProvider erweitert ServiceProvider {protected $listen = [ Login::class => [ LoginViaRemember::class, ], ];...
Folgende Ereignisse werden ausgelöst:
EmptyOneTimePasswordReceived
Abgemeldet
Fehler bei der Anmeldung
Anmeldungerfolgreich
OneTimePasswordExpired
OneTimePasswordRequested
Überprüfen Sie die ReadMe-Datei im Haupt-Google2FA-Repository.
Die Pakettests wurden mit phpspec geschrieben.
Antonio Carlos Ribeiro
Google2FA ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der LIZENZ-Datei
Pull-Requests und Issues sind mehr als willkommen.