Google2FA 是 Google 雙重認證模組的 PHP 實現,支援 RFC 4226 中指定的基於 HMAC 的一次性密碼 (HOTP) 演算法和 RFC 6238 中指定的基於時間的一次性密碼 (TOTP) 演算法。
這個包是 Laravel 與 Google2FA 的 PHP 套件的橋樑。
該套件的目的是為 Google2FA 建立 QRCodes 並檢查使用者輸入的程式碼。如果您需要建立備份/還原程式碼,請檢查以下內容。
如果您需要建立還原或備份代碼來為您的使用者提供恢復遺失帳戶的方法,您可以使用復原包。
請檢查 Google2FA Package Playground。
這是一個演示應用程序,展示如何使用 Google2FA:google2fa-example。
您可以使用 Google Authenticator 應用程式掃描此(舊)演示頁面上的二維碼,並(幾乎)即時查看程式碼變更。
拉維爾 | 谷歌2FA | Google2FA-Laravel |
---|---|---|
4.2 | <= 1.0.1 | |
5.0-5.1 | <= 1.0.1 | |
5.2-10.x | >= 2.0.0 | >= 0.2.0 |
在 Google2FA 2.0 (Laravel 5.1) 之前,您必須安裝pragmarx/google2fa:~1.0
,因為這個套件既是 Laravel 套件又是 PHP(不可知)。
點擊此處查看中介軟體示範:
使用 Composer 來安裝它:
composer require pragmarx/google2fa-laravel
您無需執行任何其他操作,此套件會使用新的自動發現功能自動載入服務提供者並建立別名。
將 Service Provider 和 Facade 別名加入app/config/app.php
(Laravel 4.x) 或config/app.php
(Laravel 5.x) 中:
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
php artisan 供應商:發布 --provider="PragmaRXGoogle2FALaravelServiceProvider"
使用 Google2FA;返回 Google2FA::generateSecretKey();
$google2fa = app('pragmarx.google2fa');返回 $google2fa->generateSecretKey();
該軟體包有一個中間件,可幫助您在應用程式上編寫 2FA 程式碼。要使用它,您只需:
受保護的$routeMiddleware = [ ....'2fa' => PragmaRXGoogle2FALaravelMiddleware::類, ];
路線::get('/admin', function () {return view('admin.index'); })->中介軟體(['auth', '2fa']);
該套件使用 Google2FA-QRCode 套件,請檢查它以獲取有關如何為您的用例配置正確的 QRCode 生成器的更多資訊。
有三種可用: imagemagick (預設)、 svg和eps 。
您可以透過配置來更改它:
/* * 使用哪個影像後端產生二維碼? * * 支援 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" method="POST"><input name="one_time_password" type="text"><button type="submit">驗證</button></form>
通常 OTP 會永遠持續,直到使用者登出您的應用程式為止,但是,為了提高應用程式安全性,您可能需要不時地重新詢問(僅針對 Google OTP)。所以你可以在這裡設定分鐘數:
/*** 生命週期以分鐘為單位。
請記住,這在背景使用 Laravel 會話。如果此數字超過config('session.lifetime')
中設定的值,即使您的 OTP 生命週期尚未過期,您仍將被登出。
您可以決定您的 OTP 在您的使用者瀏覽網站時是否保持活動狀態:
/** * 在每個新請求時更新生命週期。 */'keep_alive' => true,
此命令將註銷您的用戶並在下一個請求時將他/她重定向到 2FA 表單:
Google2FA::註銷();
如果您不想使用 Facade,您可以:
使用 PragmaRXGoogle2FALaravelSupportAuthenticator; (新的身份驗證器(請求()))->註銷();
除非你需要一些非常奇特的東西,否則你可以使用 Laravel 的路由節流中間件來實現:
路線::get('/admin', function () {return view('admin.index'); })->中介軟體(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// otp 驗證成功!
您也可以使用無狀態中間件:
受保護的$routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::class, ];
當 Laravel 透過記住登入被啟動時,會話將被更新,並且再次需要 2FA 代碼。若要解決此問題,請在AppProvidersEventServiceProvider
中新增LoginViaRemember
偵聽器:
使用 IlluminateAuthEventsLogin;使用 PragmaRXGoogle2FALaravelListenersLoginViaRemember;類別 EventServiceProvider 擴充 ServiceProvider {受保護的$聽= [ 登入::類別 => [ LoginViaRemember::類, ], ];...
會觸發以下事件:
收到空一次性密碼
登出
登入失敗
登入成功
一次性密碼已過期
請求一次性密碼
檢查 Google2FA 主儲存庫中的自述文件。
包測試是用 phpspec 編寫的。
安東尼奧·卡洛斯·裡貝羅
Google2FA 根據 MIT 許可證獲得許可 - 有關詳細信息,請參閱許可證文件
拉取請求和問題非常受歡迎。