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!'; } } } // 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(); ?> 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
← Zurück