مقاله

راه‌اندازی 2FA با Google Authenticator در Laravel — Jetstream، laravel/fortify یا پیاده‌سازی TOTP سفارشی.

احراز هویت دو مرحله‌ای (2FA) در Laravel — TOTP و امنیت حساب

احراز هویت دو مرحله‌ای (2FA) در Laravel — TOTP و امنیت حساب

رمز لو رفته؟ با 2FA مهاجم بدون کد ۶ رقمی TOTP وارد نمی‌شود. برای پنل ادمین، فین‌تک و هر حساب حساس، 2FA دیگر luxury نیست. Laravel چند مسیر دارد: Jetstream built-in، Fortify features، یا پکیج سفارشی.

2FA چگونه کار می‌کند؟

  1. کاربر QR را با Google Authenticator / Authy اسکن می‌کند
  2. secret در DB encrypted ذخیره می‌شود
  3. هر login: password + کد ۶ رقمی time-based (TOTP)
  4. recovery codes یک‌بارمصرف برای گم شدن گوشی

مسیر ۱ — Laravel Jetstream

Jetstream با Fortify 2FA کامل دارد — اگر از اول stack بزرگ می‌خواهید:

composer require laravel/jetstream
php artisan jetstream:install livewire
# یا inertia

برای پروژه minimal شاید سنگین — Breeze + fortify دستی.

مسیر ۲ — Fortify features

Fortify backend auth را handle می‌کند — twoFactorAuthentication در config fortify فعال شود. UI خودتان در Blade/Livewire.

فیلدهای معمول users

$table->text('two_factor_secret')->nullable();
$table->text('two_factor_recovery_codes')->nullable();
$table->timestamp('two_factor_confirmed_at')->nullable();

secret هرگز plain نمایش داده نشود بعد از setup.

جریان login با 2FA

  1. validate email/password
  2. اگر 2FA فعال → redirect به challenge view
  3. validate TOTP با window زمانی (±1 period)
  4. session regenerate

Recovery codes

۱۰ کد یک‌بارمصرف — hash ذخیره کنید. بعد از استفاده invalidate شود.

اجبار 2FA برای admin

// middleware
if ($user->is_admin && ! $user->two_factor_confirmed_at) {
    return redirect()->route('profile.2fa');
}

ترکیب با Policy.

امنیت

  • encrypt two_factor_secret
  • rate limit روی challenge
  • notify email وقتی 2FA فعال شد
  • HTTPS اجباری

چک‌لیست امنیت.

SMS 2FA؟

کمتر امن از TOTP (SIM swap) — فقط اگر TOTP ممکن نیست.

جمع‌بندی

admin و sensitive data → 2FA. موبایل API: Sanctum + device binding جدا. Session: session guide.

امنیت پنل