Bật Xác Thực Hai Yếu Tố trong Laravel

· 4 min read

Xác Thực Hai Yếu Tố (2FA) thêm một lớp bảo mật bổ sung cho ứng dụng Laravel của bạn. Hướng dẫn này sẽ đưa bạn qua các bước bật 2FA sử dụng package laravel/fortify.

Xác Thực Hai Yếu Tố Là Gì?

Xác Thực Hai Yếu Tố yêu cầu người dùng xác minh danh tính bằng hai phương thức:

  1. Thứ họ biết (ví dụ: mật khẩu).
  2. Thứ họ có (ví dụ: thiết bị di động hoặc ứng dụng xác thực).

Bước 1: Cài Đặt Laravel Fortify

Cài đặt package laravel/fortify qua Composer:

composer require laravel/fortify

Publish file cấu hình Fortify:

php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"

Bước 2: Cấu Hình Fortify

Bật Xác Thực Hai Yếu Tố trong config/fortify.php:

'features' => [
    Features::twoFactorAuthentication(),
],

Bước 3: Cập Nhật User Model

Đảm bảo model User của bạn sử dụng trait TwoFactorAuthenticatable:

use Laravel\Fortify\TwoFactorAuthenticatable;

class User extends Authenticatable {
    use TwoFactorAuthenticatable;
}

Bước 4: Chạy Migration

Fortify yêu cầu các cột bổ sung trong bảng users. Chạy migration:

php artisan migrate

Bước 5: Thiết Lập Frontend

Fortify không bao gồm scaffolding frontend. Bạn có thể sử dụng frontend của riêng mình hoặc cài đặt package như laravel/ui:

composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev

Thêm giao diện thiết lập và xác minh 2FA vào ứng dụng của bạn. Ví dụ, bạn có thể sử dụng thư viện QR code như bacon/bacon-qr-code để hiển thị mã QR.

Bước 6: Bật 2FA Cho Người Dùng

Người dùng có thể bật 2FA từ cài đặt hồ sơ của họ. Cung cấp route và controller để xử lý việc thiết lập:

Route::post('/user/two-factor-authentication', [TwoFactorController::class, 'store']);
Route::delete('/user/two-factor-authentication', [TwoFactorController::class, 'destroy']);

Trong TwoFactorController, sử dụng các phương thức enableTwoFactorAuthenticationdisableTwoFactorAuthentication:

public function store(Request $request) {
    $request->user()->enableTwoFactorAuthentication();

    return back()->with('status', 'Two-factor authentication enabled.');
}

public function destroy(Request $request) {
    $request->user()->disableTwoFactorAuthentication();

    return back()->with('status', 'Two-factor authentication disabled.');
}

Bước 7: Xác Minh Token 2FA

Khi 2FA được bật, người dùng phải xác minh token trong quá trình đăng nhập. Fortify xử lý điều này tự động. Đảm bảo form đăng nhập của bạn bao gồm trường two_factor_code:

<input type="text" name="two_factor_code" placeholder="Nhập mã 2FA của bạn">

Bước 8: Mã Dự Phòng

Fortify tạo mã dự phòng cho người dùng. Hiển thị các mã này cho người dùng khi họ bật 2FA:

$backupCodes = $request->user()->recoveryCodes();

Lưu trữ các mã này một cách an toàn và cho phép người dùng tạo lại nếu cần.

Các Thực Hành Tốt Nhất

  1. Hướng Dẫn Người Dùng: Cung cấp hướng dẫn rõ ràng về cách thiết lập và sử dụng 2FA.
  2. Bảo Mật Mã Dự Phòng: Đảm bảo mã dự phòng được lưu trữ an toàn và chỉ người dùng mới có thể truy cập.
  3. Test Kỹ Lưỡng: Test luồng 2FA, bao gồm bật, tắt và xác minh token.
  4. Giám Sát Sử Dụng: Ghi log các sự kiện liên quan đến 2FA để kiểm tra và khắc phục sự cố.

Bằng cách bật Xác Thực Hai Yếu Tố, bạn có thể tăng cường đáng kể bảo mật cho ứng dụng Laravel của mình. Bắt đầu triển khai 2FA ngay hôm nay để bảo vệ người dùng và dữ liệu của họ.

Bình luận