Google Two-Factor Authentication(2FA)の導入方法
Google Two-Factor Authentication(2FA)の導入をしたのでその備忘録
Google2FAパッケージのインストール
まずは、Google2FAパッケージをインストール
composer require pragmarx/google2fa-laravel
こちらのライブラリ
https://github.com/antonioribeiro/google2fa-laravel
設定
Google2FAパッケージをインストールしたら、Laravelの設定ファイルを公開する
php artisan vendor:publish --provider="PragmaRX\Google2FALaravel\ServiceProvider"
middlewareの設定
app/Http/Kernel.php
上記のKernel.phpファイルに下記を追加
protected $routeMiddleware = [
// 略
'2fa' => \PragmaRX\Google2FALaravel\Middleware::class,
];
ルートの設定
2FAの認証ルートを設定します。
Route::group(['middleware' => 'auth','2fa'], function () {
Route::get('two-factor-authentication', [Google2faController::class, 'index']);
Route::post('two-factor-authentication/login', [Google2faController::class, 'login']);
});
認証処理
コードに詳細を記載しておきます。
<?php
namespace App\Http\Controllers\Api\Admin;
// use略
use PragmaRX\Google2FA\Google2FA;
class Google2faController extends Controller
{
// 表示
public function index()
{
$google2fa = new Google2FA(); // 必須
$secretKey = $google2fa->generateSecretKey(); //必須
$user->google2fa_secret_key = $secretKey;
$user->save();
// ↑ここで、あらかじめ作成したUserテーブルのシークレットキー用カラムに$secretKeyを保存しておく
$google2faUrl = $google2fa->getQRCodeUrl(
$Name, // ログインする名前を入れるのが一般的
$user->email, // ユーザーのメールアドレス
$secretKey
);
$google2faItems = [
'secretKey' => $secretKey,
'QRCodeUrl' => $google2faUrl // これをフロント側でどうにかしてQRコードに変換
];
}
return $google2faItems;
}
//ログイン処理
public function login(Request $request)
{
$code = $request->input('authenticationCode');
// $request->input('authenticationCode');はGoogle Authenticaterアプリで表示されている6桁の数字
$secret = $request->input('secretKey');
// シークレットキー
$google2fa = new Google2FA(); // 必須
$valid = $google2fa->verifyKey($secret, $code);
// $validで認証の結果がbooleanで返ってくる
if (!$valid) {
return response()->json(
['message' => 'アクセス権限がありません']
);
}
return $loginData //ログイン後に必要なデータを返す。
}
}
ここから、開発環境によって変更する部分がありますが、私はこれでgoogleの2段階認証の実装を行いました!
ご参考になれば幸いです。
一緒に働く仲間を募集しています!
株式会社コネクター・ジャパンでは一緒に働いてくれる仲間を募集しています!
事業拡大に伴い、エンジニアさんを大募集しています。
興味のある方は下記リンクから弊社のことをぜひ知っていただき応募してもらえると嬉しいです。
▼会社について
https://www.wantedly.com/companies/cnctor/about
▼代表メッセージ
https://cnctor.jp/10years-anniversary/
▼応募はこちら
https://www.wantedly.com/projects/1522201