דלג לתוכן הראשי

אימות דו-שלבי (2FA)

מימוש TOTP (סיסמה חד-פעמית מבוססת זמן) באמצעות ספריית OTPAuth.

ארכיטקטורה

  • ספרייה: otpauth (TOTP, SHA1, 6 ספרות, מחזור 30 שניות)
  • קודי גיבוי: 10 קודים, 8 תווים hex דרך crypto.randomBytes(4)
  • אחסון: שדות במודל User — twoFactorSecret, twoFactorEnabled, twoFactorBackupCodes

זרימת אימות

בקשת התחברות
├─ פרטים תקינים + 2FA מושבת → החזרת JWT tokens
└─ פרטים תקינים + 2FA מופעל → החזרת { requiresTwoFactor: true, tempUserId }
└─ הלקוח שולח קוד TOTP
├─ TOTP תקין → החזרת JWT tokens
└─ TOTP לא תקין → בדיקת קודי גיבוי
├─ קוד גיבוי תקין → צריכת הקוד, החזרת JWT tokens
└─ לא תקין → 401 Unauthorized

נקודות קצה

MethodEndpointתיאוראימות
GET/auth/2fa/setupיצירת QR code URI + סודJWT
POST/auth/2fa/enableהפעלת 2FAJWT
DELETE/auth/2fa/disableהשבתת 2FAJWT
POST/auth/2fa/verifyאימות TOTP בזמן התחברותTemp token

קודי גיבוי

  • נוצרים עם crypto.randomBytes(4).toString('hex') (8 תווים hex כל אחד)
  • נשמרים כמערך במסמך המשתמש
  • נצרכים בשימוש — מוסרים מהמערך לאחר אימות מוצלח
  • ניתן לחדש דרך regenerateBackupCodes()
קריטי
  • סודות TOTP נשמרים בבסיס הנתונים — יש להצפין ב-MongoDB encryption at rest
  • קודי גיבוי הם חד-פעמיים ומוסרים מיד מהמערך