requireLogin(); $db = Database::getInstance(); $user = $auth->getCurrentUser(); $appTitle = $db->getSetting('app_title', 'UniFi Voucher System'); $error = ''; $success = ''; $backupCodes = []; // nur direkt nach Erzeugung gefüllt $hasPassword = !empty($user['password_hash']); $totpEnabled = !empty($user['totp_enabled']); $setupRequired = isset($_GET['setup_required']); // 2FA aktivieren (Code bestaetigen) if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['enable_totp'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { $secret = $_SESSION['totp_setup_secret'] ?? ''; $code = trim($_POST['code'] ?? ''); if ($secret === '') { $error = 'Setup abgelaufen, bitte erneut starten.'; } elseif (!Totp::verify($secret, $code)) { $error = 'Code ungültig. Bitte erneut versuchen.'; } else { $backupCodes = $auth->enableTotp($user['id'], $secret); unset($_SESSION['totp_setup_secret']); $totpEnabled = true; $user = $auth->getCurrentUser(); $success = 'Zwei-Faktor-Authentifizierung wurde aktiviert. Bitte Recovery-Codes sicher speichern!'; } } } // Überall abmelden (andere Sessions beenden) if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['logout_others'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { $auth->logoutOtherSessions(); $success = 'Alle anderen Sitzungen wurden beendet.'; } } // Recovery-Codes neu erzeugen if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['regen_codes'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } elseif (!empty($user['totp_enabled'])) { $backupCodes = $auth->regenerateBackupCodes($user['id']); $user = $auth->getCurrentUser(); $success = 'Neue Recovery-Codes erzeugt. Die alten sind jetzt ungültig.'; } } // 2FA deaktivieren if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['disable_totp'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { $auth->disableTotp($user['id']); $totpEnabled = false; $success = 'Zwei-Faktor-Authentifizierung wurde deaktiviert.'; } } // Für die Setup-Ansicht ein Secret erzeugen (in Session halten bis bestätigt) $setupSecret = ''; $otpUri = ''; if (!$totpEnabled && $hasPassword) { $setupSecret = $_SESSION['totp_setup_secret'] ?? Totp::generateSecret(); $_SESSION['totp_setup_secret'] = $setupSecret; $otpUri = Totp::provisioningUri($setupSecret, $user['email'], $appTitle); } $csrf = $auth->getCsrfToken(); $dbSessions = $db->getSetting('session_driver', 'php') === 'db'; $activeSessions = $dbSessions ? $auth->activeSessionCount() : 0; ?> Zwei-Faktor-Authentifizierung – <?= htmlspecialchars($appTitle) ?>

Zwei-Faktor-Authentifizierung

Konto:

Aus Sicherheitsgründen ist 2FA für Administratoren verpflichtend. Bitte jetzt einrichten.
Recovery-Codes

Bewahren Sie diese sicher auf. Jeder Code funktioniert einmal, falls Sie keinen Zugriff auf Ihre App haben.

Nicht verfügbar

Ihr Konto meldet sich über Microsoft 365 an. 2FA wird dort in Ihrem Microsoft-Konto verwaltet.

Aktiv

Bei jeder Anmeldung wird zusätzlich ein Code aus Ihrer Authenticator-App abgefragt.
Verbleibende Recovery-Codes: backupCodesRemaining($user) ?>

Inaktiv
  1. Authenticator-App öffnen (Google Authenticator, Authy, Microsoft Authenticator …)
  2. QR-Code scannen oder Secret manuell eingeben
  3. Den angezeigten 6-stelligen Code unten eingeben

Aktive Sitzungen: