21 KiB
DBOIS Tweefactorauthenticatie - Beheerdershandleiding
Inhoudsopgave
- Introductie
- Installatie en Configuratie
- Gebruikers Helpen met 2FA Setup
- Veelvoorkomende Problemen Oplossen
- Gebruikers Deblokkeren
- Best Practices
- Veelgestelde Vragen
Introductie
Wat is Tweefactorauthenticatie?
Tweefactorauthenticatie (2FA) is een extra beveiligingslaag die vereist dat gebruikers twee vormen van identificatie opgeven bij het inloggen:
- Iets dat ze weten: hun wachtwoord
- Iets dat ze hebben: hun telefoon of e-mailaccount
Waarom 2FA Gebruiken?
- Bescherming tegen gestolen wachtwoorden: Zelfs als iemands wachtwoord wordt gestolen, kan een aanvaller niet inloggen zonder toegang tot de tweede factor
- Compliance: Voldoet aan beveiligingsrichtlijnen en compliance-vereisten
- Vertrouwen: Gebruikers weten dat hun accounts beter beschermd zijn
Beschikbare 2FA Methodes
DBOIS ondersteunt twee 2FA-methodes:
-
E-mail OTP (One-Time Password)
- Gebruiker ontvangt een 6-cijferige code per e-mail
- Code is 10 minuten geldig
- Eenvoudig te gebruiken, geen extra app nodig
- Geschikt voor gebruikers die niet technisch onderlegd zijn
-
Google Authenticator
- Gebruiker installeert een authenticator app op hun smartphone
- App genereert elke 30 seconden een nieuwe 6-cijferige code
- Werkt zonder internetverbinding
- Veiliger dan e-mail (geen afhankelijkheid van e-mailbeveiliging)
- Apps: Google Authenticator, Microsoft Authenticator, Authy, etc.
Installatie en Configuratie
Stap 1: Database Migratie Uitvoeren
BELANGRIJK: Voer eerst een backup uit van uw database voordat u de migratie uitvoert!
Optie A: Via Command Line
# Navigeer naar de DBOIS directory
cd /pad/naar/dbois
# Voer de migratie uit
mysql -u [gebruikersnaam] -p [database_naam] < application/migrations/001_add_two_factor_authentication.sql
Vervang:
[gebruikersnaam]met uw MySQL gebruikersnaam[database_naam]met de naam van uw DBOIS database
Optie B: Via phpMyAdmin
- Log in op phpMyAdmin
- Selecteer de DBOIS database
- Klik op de "SQL" tab
- Open het bestand
application/migrations/001_add_two_factor_authentication.sqlin een teksteditor - Kopieer de gehele inhoud
- Plak in het SQL venster van phpMyAdmin
- Klik op "Go" of "Uitvoeren"
Verificatie
Controleer of de migratie succesvol was:
-- Controleer nieuwe kolommen in users tabel
DESCRIBE users;
-- U zou deze kolommen moeten zien:
-- two_factor_enabled
-- two_factor_method
-- two_factor_secret
-- Controleer nieuwe tabel
SHOW TABLES LIKE 'user_otp_codes';
Stap 2: E-mail Configuratie Controleren
Zorg ervoor dat de e-mailconfiguratie correct is ingesteld in application/config/email.php:
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'mail.uwdomain.nl';
$config['smtp_user'] = 'noreply@dbois.nl';
$config['smtp_pass'] = 'uw_wachtwoord';
$config['smtp_port'] = 587;
$config['smtp_crypto'] = 'tls';
$config['mailtype'] = 'html';
$config['charset'] = 'utf-8';
$config['newline'] = "\r\n";
Test de e-mailconfiguratie door de wachtwoord-vergeten functie te gebruiken.
Stap 3: Link naar 2FA Instellingen Toevoegen
Voeg een link toe in het gebruikersmenu zodat gebruikers hun 2FA kunnen beheren:
Voorbeeld locatie: In uw hoofdnavigatie of gebruikersprofiel menu:
<li>
<a href="/beheer/TwoFactorController">
<i class="icon wb-lock"></i>
<span>2FA Instellingen</span>
</a>
</li>
Of in een dropdown menu:
<a class="dropdown-item" href="/beheer/TwoFactorController">
<i class="icon wb-lock"></i> Tweefactorauthenticatie
</a>
Stap 4: Test de Implementatie
- Log in als testgebruiker
- Ga naar
/beheer/TwoFactorController - Schakel 2FA in met e-mail methode
- Log uit en log opnieuw in
- Verifieer dat u de OTP code ontvangt en kunt invoeren
- Test ook de Google Authenticator methode
Gebruikers Helpen met 2FA Setup
E-mail OTP Methode Instellen
Stap 1: Gebruiker gaat naar 2FA Instellingen
- URL:
/beheer/TwoFactorController - Of via menu: Gebruikersprofiel → 2FA Instellingen
Stap 2: E-mail methode selecteren
- Klik op het "E-mail" kaartje
- Klik op "2FA Inschakelen"
Stap 3: Bevestiging
- Gebruiker ziet melding: "Tweefactorauthenticatie ingeschakeld"
- Pagina toont huidige status: E-mail methode actief
Stap 4: Testen
- Log uit
- Log opnieuw in met gebruikersnaam en wachtwoord
- Controleer e-mail inbox (en spam folder!)
- Voer 6-cijferige code in
- Klik "Verifiëren"
Tips voor gebruikers:
- Bewaar de DBOIS e-mail adres (noreply@dbois.nl) in contacten om te voorkomen dat mails in spam terechtkomen
- Codes zijn 10 minuten geldig
- Nieuwe code kan worden aangevraagd met "Code opnieuw verzenden"
Google Authenticator Methode Instellen
Stap 1: Authenticator App Installeren
- iOS: Download "Google Authenticator" of "Microsoft Authenticator" uit App Store
- Android: Download "Google Authenticator" of "Microsoft Authenticator" uit Play Store
- Alternatief: Authy (multi-device ondersteuning)
Stap 2: 2FA Instellingen Openen
- Ga naar
/beheer/TwoFactorController
Stap 3: Google Authenticator Selecteren
- Klik op het "Google Authenticator" kaartje
- Klik op "2FA Inschakelen"
Stap 4: QR Code Scannen
- Een QR code verschijnt op het scherm
- Open de authenticator app op de telefoon
- Klik op "+" of "Account toevoegen"
- Selecteer "QR code scannen"
- Scan de QR code op het scherm
- DBOIS verschijnt nu in de app met een 6-cijferige code
Stap 5: Verificatie
- De 6-cijferige code in de app verandert elke 30 seconden
- Voer de huidige code in op het verificatiescherm
- Klik "Verifiëren"
- Bij succes: 2FA is nu actief
Stap 6: Testen
- Log uit
- Log opnieuw in
- Open authenticator app
- Voer de 6-cijferige code in (let op: code verandert elke 30 seconden!)
- Klik "Verifiëren"
Belangrijk voor gebruikers:
- ⚠️ Bewaar de QR code of secret code veilig (screenshot maken en veilig opslaan)
- Als telefoon verloren gaat, kan de QR code gebruikt worden om opnieuw in te stellen
- Codes zijn 30 seconden geldig
- Zorg dat de tijd op de telefoon correct is ingesteld (belangrijk voor TOTP!)
Methode Wijzigen
Gebruikers kunnen later van methode wisselen:
- Ga naar 2FA Instellingen
- Selecteer een andere methode (E-mail of Google Authenticator)
- Klik "Methode Wijzigen"
- Volg de setup stappen voor de nieuwe methode
2FA Uitschakelen
Als een gebruiker 2FA wil uitschakelen:
- Ga naar 2FA Instellingen
- Scroll naar beneden
- Klik op rode knop "2FA Uitschakelen"
- Bevestig de actie
Let op: Vanuit beveiligingsperspectief raden we aan om 2FA verplicht te stellen voor beheerders en gebruikers met gevoelige toegang.
Veelvoorkomende Problemen Oplossen
Probleem 1: E-mail OTP Niet Ontvangen
Diagnose checklist:
- Is de e-mail configuratie correct? (test met wachtwoord-vergeten functie)
- Controleer spam/junk folder
- Is het e-mailadres van de gebruiker correct in de database?
- Controleer applicatie logs voor e-mail fouten
Oplossing A: E-mail Configuratie Controleren
- Test de e-mail functionaliteit:
// In een test controller
$this->load->library('email');
$this->email->from('noreply@dbois.nl', 'DBOIS');
$this->email->to('uw@email.nl');
$this->email->subject('Test');
$this->email->message('Test bericht');
if (!$this->email->send()) {
echo $this->email->print_debugger();
}
- Controleer SMTP instellingen in
application/config/email.php - Controleer firewall/server configuratie voor uitgaande SMTP
Oplossing B: Code Opnieuw Verzenden
- Gebruiker klikt op "Code opnieuw verzenden" op de verificatiepagina
- Check of nieuwe code wordt verzonden
- Controleer spam folder
Oplossing C: Tijdelijk Uitschakelen
Als beheerder kunt u 2FA tijdelijk uitschakelen (zie Gebruikers Deblokkeren)
Probleem 2: Authenticator Code Werkt Niet
Meest voorkomende oorzaken:
A. Tijd Niet Gesynchroniseerd
- Authenticator codes zijn tijd-gebaseerd
- Als de klok van de telefoon niet correct is, werken codes niet
Oplossing:
- Ga naar telefooninstellingen
- Schakel "Automatische datum en tijd" in
- Of handmatig de juiste tijd instellen
- Voor Android: In Google Authenticator app → Menu → Instellingen → Tijd correctie voor codes → Synchroniseer nu
- Probeer opnieuw in te loggen
B. Verkeerde QR Code Gescand
- Mogelijk oude QR code gebruikt
- QR code van andere account gescand
Oplossing:
- Verwijder het DBOIS account uit de authenticator app
- Log in op DBOIS (beheerder schakelt 2FA tijdelijk uit)
- Ga naar 2FA instellingen
- Schakel 2FA opnieuw in
- Scan de nieuwe QR code
C. Te Lang Gewacht met Code Invoeren
- Codes zijn 30 seconden geldig
- Als code bijna verlopen is bij invoeren, kan validatie falen
Oplossing:
- Wacht op nieuwe code (elke 30 seconden)
- Voer code direct in zodra deze verschijnt
Probleem 3: Gebruiker Zit Vast op Verificatiepagina
Symptoom: Gebruiker blijft hangen op /login/showVerify2fa
Diagnose:
- Session data mogelijk corrupt
- Browser cookies geblokkeerd
Oplossing A: Via Browser
- Klik op "Annuleren" link onderaan de verificatiepagina
- Dit redirect terug naar login pagina
Oplossing B: Via Database (als beheerder)
-- Verwijder actieve sessies voor deze gebruiker
DELETE FROM ci_sessions
WHERE data LIKE '%pending_2fa_user_id%';
Oplossing C: Browser Cache Wissen
- Wis browser cookies en cache
- Sluit browser volledig
- Open opnieuw en probeer in te loggen
Probleem 4: QR Code Wordt Niet Weergegeven
Oorzaken:
- JavaScript errors
- Browser compatibiliteit
- Netwerk problemen
Oplossing:
- Check browser console voor errors (F12 → Console tab)
- Probeer andere browser (Chrome, Firefox, Safari)
- Controleer dat JavaScript enabled is
- Refresh de pagina (Ctrl+F5 of Cmd+Shift+R)
Alternatief: Handmatige Code Invoer
- Onder de QR code staat een tekstuele secret code
- Deze kan handmatig worden ingevoerd in de authenticator app:
- Open authenticator app
- Klik "+" → "Enter a setup key"
- Voer account naam in: DBOIS
- Voer de secret code in
- Selecteer "Time based"
- Opslaan
Probleem 5: "Ongeldige Verificatiecode" Foutmelding
Mogelijke oorzaken en oplossingen:
A. Code Verlopen
- E-mail codes: 10 minuten geldig
- Authenticator codes: 30 seconden geldig
Oplossing: Gebruik een nieuwe/actuele code
B. Typfout
- Code incorrect overgetypt
- Letters gebruikt in plaats van cijfers (O vs 0)
Oplossing: Zorgvuldig code opnieuw invoeren, gebruik copy-paste voor e-mail codes
C. Meerdere Pogingen
- Code al gebruikt
- Multiple browser tabs/windows
Oplossing:
- Voor e-mail: vraag nieuwe code aan
- Voor authenticator: wacht op nieuwe code
D. Database Problemen
- OTP record niet gevonden
- Session data verloren
Oplossing: Beheerder reset 2FA (zie volgende sectie)
Gebruikers Deblokkeren
Scenario 1: Gebruiker Heeft Toegang Tot Telefoon/E-mail Verloren
Situatie: Gebruiker kan niet inloggen omdat:
- Telefoon verloren/gestolen/kapot
- Geen toegang tot e-mail
- Authenticator app verwijderd
Oplossing: 2FA Handmatig Uitschakelen
Methode A: Via Database (Meest Direct)
- Log in op MySQL/phpMyAdmin
- Voer deze query uit:
-- Zoek de gebruiker
SELECT id, username, email, two_factor_enabled, two_factor_method
FROM users
WHERE username = 'gebruikersnaam';
-- Schakel 2FA uit voor deze gebruiker
UPDATE users
SET
two_factor_enabled = 'F',
two_factor_method = NULL,
two_factor_secret = NULL
WHERE id = [user_id];
-- Verwijder eventuele OTP codes
DELETE FROM user_otp_codes WHERE user_id = [user_id];
- Gebruiker kan nu inloggen met alleen wachtwoord
- Adviseer gebruiker om 2FA opnieuw in te stellen
Methode B: Via PHP Script
Maak een tijdelijk PHP bestand disable_2fa.php in de root:
<?php
// BELANGRIJK: Verwijder dit bestand na gebruik!
// Alleen voor noodgevallen
require_once 'system/core/CodeIgniter.php';
$username = 'gebruikersnaam'; // Wijzig dit
$CI =& get_instance();
$CI->load->database();
$CI->load->model('beheer/User_model');
// Haal gebruiker op
$user = $CI->User_model->getUserByUsername($username);
if (!$user) {
echo "Gebruiker niet gevonden";
exit;
}
// Update database
$data = [
'two_factor_enabled' => 'F',
'two_factor_method' => NULL,
'two_factor_secret' => NULL
];
$CI->User_model->update_record($user->id, $data);
echo "2FA uitgeschakeld voor gebruiker: " . $username;
echo "\n<br>Gebruiker kan nu inloggen met alleen wachtwoord";
echo "\n<br><strong>VERWIJDER DIT BESTAND!</strong>";
?>
Gebruik:
- Upload
disable_2fa.phpnaar DBOIS root directory - Ga naar
https://uwdomain.nl/dbois/disable_2fa.php - BELANGRIJK: Verwijder het bestand direct na gebruik!
Scenario 2: Massa-Reset (Meerdere Gebruikers)
Situatie: Na een incident moeten meerdere gebruikers gereset worden.
Oplossing: Bulk Database Update
-- Schakel 2FA uit voor alle gebruikers
UPDATE users
SET
two_factor_enabled = 'F',
two_factor_method = NULL,
two_factor_secret = NULL;
-- Verwijder alle OTP codes
TRUNCATE TABLE user_otp_codes;
Let op: Alleen in noodgevallen gebruiken! Vraag gebruikers daarna 2FA opnieuw in te stellen.
Scenario 3: Gebruiker Kan Geen Nieuwe Codes Ontvangen
E-mail Methode: Oude codes nog steeds verzonden, nieuwe codes komen niet aan
Diagnose:
-- Controleer actieve OTP codes voor gebruiker
SELECT * FROM user_otp_codes
WHERE user_id = [user_id]
AND used = 'F'
AND expires_at > NOW()
ORDER BY created_at DESC;
Oplossing: OTP Codes Wissen
-- Verwijder alle OTP codes voor deze gebruiker
DELETE FROM user_otp_codes WHERE user_id = [user_id];
Nu kan gebruiker nieuwe code aanvragen.
Best Practices voor Deblokkering
-
Identificatie Verifiëren: Zorg dat u de identiteit van de gebruiker verifieert voordat u 2FA uitschakelt
- Telefonisch contact met bekend nummer
- In persoon verificatie
- Via manager/supervisor
-
Documenteer de Actie: Houd bij wanneer en waarom 2FA werd uitgeschakeld
[Datum] - 2FA uitgeschakeld voor [gebruiker] - Reden: [telefoon verloren] -
Tijdelijke Uitschakeling: Geef gebruiker beperkte tijd om 2FA opnieuw in te stellen
- Mail de gebruiker met instructies
- Stel deadline (bijv. 24 uur)
-
Wachtwoord Reset Overwegen: Als veiligheidsrisico groot is, forceer ook wachtwoord wijziging
-- Dit forceert wachtwoord reset bij volgende login (indien geïmplementeerd) UPDATE users SET password_reset_required = 'T' WHERE id = [user_id];
Best Practices
Voor Beheerders
1. Verplicht 2FA voor Gevoelige Accounts
Overweeg 2FA verplicht te stellen voor:
- Alle beheerders
- Gebruikers met financiële toegang
- Gebruikers met toegang tot persoonlijke data
Implementatie:
// In MY_Controller of inlog verificatie
if ($user->role <= 2 && $user->two_factor_enabled !== 'T') {
// Redirect naar 2FA setup met melding
redirect('/beheer/TwoFactorController?required=true');
}
2. Regelmatig OTP Codes Opschonen
Voeg een cron job of scheduled task toe:
# Dagelijks om 03:00
0 3 * * * curl -s https://uwdomain.nl/dbois/maintenance/cleanup2fa
PHP endpoint (maintenance/cleanup2fa):
public function cleanup2fa() {
$this->load->model('beheer/UserOtp_model');
$deleted = $this->UserOtp_model->cleanupExpiredOTPs();
log_message('info', "2FA Cleanup: {$deleted} expired OTP codes deleted");
}
3. Monitor 2FA Adoptie
Track hoeveel gebruikers 2FA hebben ingeschakeld:
-- 2FA statistieken
SELECT
COUNT(*) as total_users,
SUM(CASE WHEN two_factor_enabled = 'T' THEN 1 ELSE 0 END) as users_with_2fa,
SUM(CASE WHEN two_factor_method = 'email' THEN 1 ELSE 0 END) as email_method,
SUM(CASE WHEN two_factor_method = 'authenticator' THEN 1 ELSE 0 END) as authenticator_method,
ROUND(SUM(CASE WHEN two_factor_enabled = 'T' THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) as adoption_percentage
FROM users
WHERE archive = 'F';
4. Backup Strategie
Voor Google Authenticator gebruikers:
- Adviseer gebruikers om QR code screenshot veilig op te slaan
- Of secret code op veilige plek te bewaren
- Overweeg gebruik van Authy (cloud backup functionaliteit)
5. Communicatie
Bij Uitrol:
- Stuur e-mail aankondiging 1 week van tevoren
- Organiseer training sessies of demo's
- Maak instructie video's beschikbaar
- Bied helpdesk ondersteuning
Ongoing:
- Voeg 2FA info toe aan onboarding proces
- Herinner gebruikers zonder 2FA periodiek
- Share security awareness tips
Voor Eindgebruikers
Do's
✅ Schakel 2FA in voor extra beveiliging ✅ Gebruik Google Authenticator voor maximale veiligheid ✅ Bewaar QR code of secret code veilig ✅ Test 2FA setup direct na instellen ✅ Update telefoonnummer en e-mail adres in profiel ✅ Gebruik een app met backup (zoals Authy)
Don'ts
❌ Deel nooit uw 2FA codes ❌ Screenshot QR codes niet in onbeveiligde cloud ❌ Gebruik geen publieke computers voor 2FA setup ❌ Negeer niet 2FA waarschuwingen ❌ Gebruik niet hetzelfde apparaat voor wachtwoord manager én 2FA (voor maximale veiligheid)
Veelgestelde Vragen
Algemeen
Q: Is 2FA verplicht? A: Dit hangt af van uw organisatie beleid. Standaard is 2FA optioneel, maar beheerders kunnen het verplicht stellen voor specifieke rollen.
Q: Welke methode is veiliger? A: Google Authenticator is veiliger omdat het niet afhankelijk is van e-mailbeveiliging en werkt zonder internetverbinding. E-mail OTP is echter gemakkelijker voor minder technische gebruikers.
Q: Hoelang duren codes? A: E-mail codes zijn 10 minuten geldig. Authenticator codes zijn 30 seconden geldig maar kunnen worden ingevoerd binnen een window van ±30 seconden (voor clock drift).
Q: Wat als ik een nieuwe telefoon krijg? A: Voor authenticator methode: gebruik de opgeslagen QR code of secret code om op nieuwe telefoon in te stellen. Of: schakel 2FA uit, log in, schakel opnieuw in met nieuwe QR code.
Q: Kan ik 2FA overslaan op vertrouwde apparaten? A: Deze functionaliteit is momenteel niet beschikbaar maar staat op de roadmap voor toekomstige updates.
Technisch
Q: Wordt mijn secret code versleuteld opgeslagen? A: De TOTP secret wordt opgeslagen in de database. Voor productie omgevingen wordt aanbevolen database encryptie te implementeren.
Q: Wat gebeurt er met actieve sessies als ik 2FA inschakel? A: Bestaande sessies blijven actief. 2FA wordt alleen gevraagd bij nieuwe logins.
Q: Kan ik zien wie 2FA heeft ingeschakeld? A: Ja, beheerders kunnen dit bekijken via database query:
SELECT username, email, two_factor_enabled, two_factor_method
FROM users
WHERE archive = 'F'
ORDER BY two_factor_enabled DESC;
Q: Hoeveel mislukte 2FA pogingen zijn toegestaan? A: Er is momenteel geen ingebouwde rate limiting. Dit kan worden toegevoegd voor extra beveiliging.
Problemen
Q: Ik zie "Session expired" na 2FA verificatie
A: Dit kan gebeuren als de database session te snel vervalt. Check de ci_sessions tabel en verhoog eventueel de session timeout in config.
Q: E-mails komen aan in spam A: Vraag gebruikers om noreply@dbois.nl toe te voegen aan hun contacten en as "not spam" te markeren. Controleer ook SPF/DKIM records van uw domein.
Q: Gebruiker ziet witte pagina na QR scan A: Check voor JavaScript errors in browser console. Mogelijk browser compatibiliteit issue - probeer andere browser.
Ondersteuning en Contact
Bij Problemen
- Check eerst deze handleiding voor standaard oplossingen
- Controleer logs:
- Application logs:
application/logs/ - Server logs: afhankelijk van uw server setup
- Application logs:
- Test in andere browser om browser-specifieke issues uit te sluiten
- Database backup: Maak altijd eerst een backup voordat u database wijzigingen doorvoert
Escalatie
Als probleem niet opgelost kan worden:
- Contact development team
- Verstrek: gebruikersnaam, error messages, browser/device info, screenshots
Documentatie Updates
Deze handleiding wordt bijgewerkt bij nieuwe features of veelvoorkomende issues. Check regelmatig voor updates.
Appendix: Database Schema
users tabel (relevante kolommen)
`two_factor_enabled` VARCHAR(1) NOT NULL DEFAULT 'F'
-- 'T' = enabled, 'F' = disabled
`two_factor_method` VARCHAR(20) NULL DEFAULT NULL
-- 'email' of 'authenticator'
`two_factor_secret` VARCHAR(255) NULL DEFAULT NULL
-- TOTP secret voor Google Authenticator (Base32 encoded)
user_otp_codes tabel
CREATE TABLE `user_otp_codes` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT(11) UNSIGNED NOT NULL,
`otp_code` VARCHAR(6) NOT NULL,
`expires_at` TIMESTAMP NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`used` VARCHAR(1) NOT NULL DEFAULT 'F',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_expires_at` (`expires_at`),
CONSTRAINT `fk_otp_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Laatst bijgewerkt: 2025-10-17 Versie: 1.0 Geschreven voor: DBOIS Beheerders