Google2FA — это PHP-реализация модуля двухфакторной аутентификации Google, поддерживающая алгоритм одноразового пароля на основе HMAC (HOTP), указанный в RFC 4226, и алгоритм одноразового пароля на основе времени (TOTP), указанный в RFC 6238.
Этот пакет представляет собой мост Laravel к PHP-пакету Google2FA.
Целью этого пакета является создание QRCодов для Google2FA и проверка кодов, введенных пользователем. Если вам нужно создать коды резервного копирования/восстановления, пожалуйста, проверьте ниже.
Если вам нужно создать коды восстановления или резервные коды, чтобы предоставить пользователям возможность восстановить утерянную учетную запись, вы можете использовать пакет восстановления.
Пожалуйста, проверьте игровую площадку пакета Google2FA.
Вот демо-приложение, показывающее, как использовать Google2FA: google2fa-example.
Вы можете отсканировать QR-код на этой (старой) демонстрационной странице с помощью приложения Google Authenticator и просмотреть изменение кода (почти) в режиме реального времени.
Ларавел | Google2FA | Google2FA-Laravel |
---|---|---|
4.2 | <= 1.0.1 | |
5,0-5,1 | <= 1.0.1 | |
5.2-10.х | >= 2.0.0 | >= 0.2.0 |
До версии Google2FA 2.0 (Laravel 5.1) вам необходимо было установить pragmarx/google2fa:~1.0
, поскольку этот пакет был одновременно пакетом Laravel и PHP (независимым).
Нажмите здесь, чтобы увидеть демонстрацию промежуточного программного обеспечения:
Используйте Composer для его установки:
composer require pragmarx/google2fa-laravel
Больше ничего делать не нужно: этот пакет автоматически загружает поставщика услуг и создает псевдоним, используя новую функцию автоматического обнаружения.
Добавьте псевдоним поставщика услуг и фасада в файл app/config/app.php
(Laravel 4.x) или config/app.php
(Laravel 5.x):
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
поставщик php artisan:publish --provider="PragmaRXGoogle2FALaravelServiceProvider"
используйте Google2FA; верните Google2FA::generateSecretKey();
$google2fa = app('pragmarx.google2fa');return $google2fa->generateSecretKey();
В этом пакете есть промежуточное программное обеспечение, которое поможет вам закодировать 2FA в вашем приложении. Чтобы использовать его, вам просто нужно:
защищенный $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::class, ];
Route::get('/admin', function () {return view('admin.index'); })->промежуточное ПО(['auth', '2fa']);
В этом пакете используется пакет Google2FA-QRCode. Проверьте его, чтобы получить дополнительную информацию о том, как настроить подходящие генераторы QRCode для вашего случая использования.
Доступны три: imagemagick (по умолчанию), svg и eps .
Вы можете изменить это через конфигурацию:
/* * Какой сервер изображений использовать для генерации QR-кодов? * * Поддерживает imagemagick, svg и eps */'qrcode_image_backend' => PragmaRXGoogle2FALaravelSupportConstants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK,
Или время выполнения:
Google2FA::setQRCodeBackend('svg');
Вы можете настроить режим запроса одноразового пароля в файле конфигурации (config/google2fa.php):
/** * Просмотр одноразового пароля */'view' => 'google2fa.index',
А в представлении вам просто нужно предоставить форму, содержащую входные данные, которые также можно настроить:
/** * Имя ввода запроса одноразового пароля */'otp_input' => 'one_time_password',
Вот пример формы:
<form action="/google2fa/authenticate" метод="POST"><input name="one_time_password" type="text"><button type="submit">Аутентификация</button></form>
Обычно OTP действует вечно, пока пользователь не выйдет из вашего приложения, но для повышения безопасности приложения вы можете время от времени повторно запрашивать только OTP Google. Таким образом, вы можете установить количество минут здесь:
/*** Время жизни в минутах.* На случай, если вам нужно, чтобы у пользователей время от времени запрашивался новый одноразовый пароль.*/'lifetime' => 0, // 0 = вечный
Имейте в виду, что при этом в фоновом режиме используются сеансы Laravel. Если это число превышает значение, установленное в config('session.lifetime')
вы все равно выйдете из системы, даже если срок действия вашего OTP не истек.
И вы можете решить, будет ли ваш OTP сохраняться, пока ваши пользователи просматривают сайт, или нет:
/** * Продлеваем время жизни при каждом новом запросе. */'keep_alive' => правда,
Эта команда выйдет из системы вашего пользователя и перенаправит его на форму 2FA при следующем запросе:
Google2FA::выход();
Если вы не хотите использовать Фасад, вы можете:
используйте PragmaRXGoogle2FALaravelSupportAuthenticator; (новый аутентификатор(запрос()))->выход();
Если вам не нужно что-то действительно необычное, вы, вероятно, можете использовать для этого промежуточное программное обеспечение для регулирования маршрутов Laravel:
Route::get('/admin', function () {return view('admin.index'); })->middleware(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// успешная аутентификация otp!}
Вы также можете использовать промежуточное программное обеспечение без сохранения состояния:
защищенный $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::class, ];
Когда активирован вход в Laravel через запомнить, сеанс возобновляется, и снова требуется код 2FA. Чтобы решить эту проблему, добавьте прослушиватель LoginViaRemember
в свой AppProvidersEventServiceProvider
:
используйте IlluminateAuthEventsLogin; используйте PragmaRXGoogle2FALaravelListenersLoginViaRemember; класс EventServiceProvider расширяет ServiceProvider {защищенный $listen = [ Логин::класс => [ LoginViaRemember::класс, ], ];...
Запускаются следующие события:
ПустойOneTimeПарольполучен
Вышел из системы
Ошибка входа
Вход выполнен успешно
Срок действия пароля истек
Запрошен одноразовый пароль
Проверьте файл ReadMe в основном репозитории Google2FA.
Тесты пакета были написаны с использованием phpspec.
Антонио Карлос Рибейро
Google2FA лицензируется по лицензии MIT — подробности см. в файле ЛИЦЕНЗИИ.
Запросы на включение и проблемы более чем приветствуются.