Google2FA は、Google Two-Factor Authentication Module の PHP 実装であり、RFC 4226 で指定された HMAC ベースのワンタイム パスワード (HOTP) アルゴリズムと、RFC 6238 で指定された時間ベースのワンタイム パスワード (TOTP) アルゴリズムをサポートします。
このパッケージは、Google2FA の PHP パッケージへの Laravel ブリッジです。
このパッケージの目的は、Google2FA の QRCode を作成し、ユーザーが入力したコードをチェックすることです。バックアップ/リカバリコードを作成する必要がある場合は、以下を確認してください。
ユーザーが失われたアカウントを回復する方法を提供する回復コードまたはバックアップ コードを作成する必要がある場合は、回復パッケージを使用できます。
Google2FA パッケージ プレイグラウンドを確認してください。
これは、Google2FA の使用方法を示すデモ アプリです: google2fa-example。
Google Authenticator アプリを使用してこの (古い) デモ ページの QR コードをスキャンすると、コードの変化を (ほぼ) リアルタイムで確認できます。
ララベル | 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 |
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 職人ベンダー:publish --provider="PragmaRXGoogle2FALaravelServiceProvider"
Google2FA を使用する; Google2FA::generateSecretKey() を返す;
$google2fa = app('pragmarx.google2fa');return $google2fa->generateSecretKey();
このパッケージには、アプリで 2FA をコーディングするのに役立つミドルウェアが含まれています。これを使用するには、次のことを行うだけです。
protected $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::class, ];
Route::get('/admin', function () {return view('admin.index'); })->ミドルウェア(['auth', '2fa']);
このパッケージは Google2FA-QRCode パッケージを使用します。ユースケースに適した QRCode ジェネレーターを構成する方法の詳細については、このパッケージを確認してください。
imagemagick (デフォルト)、 svg 、 eps の3 つが利用可能です。
config 経由で変更できます。
/* * 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" method="POST"><input name="one_time_password" type="text"><button type="submit">認証</button></form>
通常、OTP はユーザーがアプリからログオフするまで永久に持続しますが、アプリケーションの安全性を向上させるために、Google OTP に対してのみ、時々再要求することをお勧めします。ここで分数を設定できます。
/*** 分単位の有効期間。* ユーザーに時々新しいワンタイム パスワードを要求する必要がある場合。*/'lifetime' => 0、// 0 = 永久
これはバックグラウンドで Laravel セッションを使用することに注意してください。この数値がconfig('session.lifetime')
で設定された値を超えると、OTP の有効期限が切れていない場合でも、ログアウトされます。
また、ユーザーがサイトを閲覧している間、OTP を維持するかどうかを決定できます。
/** * 新しいリクエストごとに有効期間を更新します。 */'keep_alive' => true、
このコマンドはユーザーをログアウトし、次のリクエストで 2FA フォームにリダイレクトします。
Google2FA::logout();
ファサードを使用したくない場合は、次のようにすることができます。
PragmaRXGoogle2FALaravelSupportAuthenticator を使用します。 (new Authenticator(request()))->logout();
本当に凝ったものが必要でない限り、おそらく Laravel のルート スロットル ミドルウェアを使用できます。
Route::get('/admin', function () {return view('admin.index'); })->ミドルウェア(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// otp 認証成功!}
ステートレス ミドルウェアを使用することもできます。
protected $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::class, ];
記憶によるLaravelログインが有効化されると、セッションが更新され、2FAコードが再度必要になります。これを解決するには、 AppProvidersEventServiceProvider
にLoginViaRemember
リスナーを追加します。
IlluminateAuthEventsLogin を使用する;PragmaRXGoogle2FALaravelListenersLoginViaRemember を使用する;クラス EventServiceProvider は ServiceProvider を拡張します {保護 $listen = [ ログイン::クラス => [ LoginViaRemember::class、 ]、 ];...
次のイベントが発生します。
空のワンタイムパスワードを受け取りました
ログアウトしました
ログインに失敗しました
ログイン成功しました
ワンタイムパスワードの期限が切れました
ワンタイムパスワードが要求されました
メインの Google2FA リポジトリにある ReadMe ファイルを確認してください。
パッケージのテストは phpspec で作成されました。
アントニオ・カルロス・リベイロ
Google2FA は MIT ライセンスに基づいてライセンスされています - 詳細については LICENSE ファイルを参照してください
プルリクエストや問題は大歓迎です。