この記事では、Google AuthenticatorをLaravelアプリに統合して2要素認証(2FA)を実現し、アプリケーションセキュリティを大幅に改善する方法を導きます。
コアポイント:
この記事に貢献してくれたSitePointのピアレビュアーJad Bitar、Niklas Keller、Marco Pivetta、Anthony Chambersに感謝します!
攻撃者は、ソーシャルエンジニアリング、キーボードロガー、その他の悪意のある手段など、さまざまな方法でユーザーのパスワードを取得できます。パスワードだけでは、特に攻撃者が資格情報を取得した場合、ユーザーアカウントを侵入から保護するのに十分ではありません。
このセキュリティの欠陥を克服するために、2要素認証(2FA)が生まれました。単一のパスワード(最初の要因)では、ユーザーの身元を確認するには十分ではありません。 2FAの哲学は、ユーザーが「持っているもの」(2番目の要因)と「彼らが知っているもの」(最初の要因)の両方を使用する必要があるということです。パスワードはユーザーが知っていることです。 「彼らが持っているもの」は、生体認識(指紋、音声、虹彩スキャン)など、さまざまな形である可能性がありますが、これらのソリューションにはコストがかかります。一般的に使用される別の2番目の要因は、時間ベースのワンタイムパスワード(OTP)です。これは、デバイスによって生成され、一度に有効です。 OTPは、主にカウンタータイプと時間の種類に分割されます。 2FAの使用は、攻撃者がパスワードと2番目の要因の両方を取得することが困難であるため、ユーザー名とパスワードのみを使用するよりも安全です。
このチュートリアルでは、LaravelとGoogle Authenticatorを使用して、Webアプリケーションに2FAを実装する方法を示します。 Google Authenticatorは、時間ベースのワンタイムパスワード(TOTP)アルゴリズム(RFC 6238)の実装にすぎず、業界標準はさまざまな2FAソリューションで広く使用されています。 Google Authenticatorには、スマートフォンにダウンロードした後にオフラインで使用できるという利点がありますが、他の多くの2FAソリューションには、テキストメッセージの送信、通知、音声通話などのネットワーク接続が必要です。これは、携帯電話が外部ネットワーク(地下室にあるオフィスなど)に接続できないユーザーには適用されません。
TOTP Works:サーバーはキーを生成し、ユーザーに渡します。このキーは現在のUNIXタイムスタンプと組み合わされて、キーベースのハッシュメッセージ認証コード(HMAC)アルゴリズムを使用して6桁のOTPを生成します。この6桁の数は30秒ごとに変化します。
設定:
この記事では、Laravel Homesteadがインストールされていると想定しています。必須ではありませんが、異なる環境を使用するとコマンドはわずかに異なる場合があります(PHP 7が必要です)。 Homesteadに慣れていないが、この記事と同様の結果を得たい場合は、Homesteadを設定する方法を学ぶためにSitePointの記事を参照してください。
新しいLaravelプロジェクトを作成します:
composer create-project --prefer-dist laravel/laravel Project cd Project
作曲家を使用してPHPバージョンのLaravelを含め、ライブラリを一定の時間にインストールしますBase32エンコーディング:
composer require pragmarx/google2fa composer require paragonie/constant-time-encoding
config/app.php
配列にPragmaRXGoogle2FAVendorLaravelServiceProvider::class
配列に追加し、providers
アレイに'Google2FA' => PragmaRXGoogle2FAVendorLaravelFacade::class
を追加します。 aliases
足場を使用して、ログインと登録インターフェイスをすばやく構築します。
auth
php artisan make:auth
データベースとモデル
新しく作成された移行ファイル(
フォルダー、たとえばphp artisan make:migration add_google2fa_secret_to_users
database/migrations
移行を実行してデータベーステーブルをセットアップします:2016_01_06_152631_add_google2fa_secret_to_users.php
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddGoogle2faSecretToUsers extends Migration { public function up() { Schema::table('users', function (Blueprint $table) { $table->string('google2fa_secret')->nullable(); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('google2fa_secret'); }); } }
テーブルに追加されました。
モデルを更新して、セキュリティを強化する必要があります。デフォルトでは、プログラムがphp artisan migrate
を開いて、 ...(後続の手順は元のテキストに似ていますが、言語と式が調整され、元のテキストが変更されていないことを除きます。スペースの制限により、残りのコードと説明はここで省略されますが、元のテキストに従って、手順とコードを補足します
テスト:
デフォルトでは、ログインプロセスとTOTPセットアッププロセスはHTTPSを介して実行されません。生産環境では、httpsを介して必ず実行してください。 この記事では、認証中のセキュリティを強化するために1回限りのパスワードを追加する方法を示し、LaravelでGoogle Authenticatorを使用して2FAを実装する方法を段階的に説明します。 google2fa_secret
プロパティに追加します。 users
以上がGoogle AuthenticatorとLaravelの2FA-安全になりましょう!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。