Accounts en registratie
FAQ › Profielserver › Accounts en registratie · English
Wat is het?
Elke EUZOS-gebruiker heeft een account op de profielserver van een omgeving (SBX of PROD). De gebruikersnaam is altijd het e-mailadres, en dat adres moet bevestigd zijn (link of 6-cijferige code uit een mail) voordat het account iets mag. Elk account heeft twee profielen: Werk of school (interne waarde zakelijk) en Privé (prive). Accounts worden gemaakt door de beheerder (CLI of beheerpagina) of, als de omgeving het toestaat, door de gebruiker zelf: in de telefoon-app, op het inlogscherm van de pc ("Account maken") of op de webpagina /registreer. Accounts van een Microsoft/Entra-login worden just-in-time aangemaakt (zie Organisaties).
Hoe doe ik…?
Hoe maak ik als beheerder een account aan?
Op de VPS: euzos-profielserver user-create <email> [--first-name F] [--last-name L] [--city C] [--display-name "Naam"] [--language nl|en] (wachtwoord interactief, of --password-stdin). Het account begint als niet_geverifieerd en het adres krijgt meteen een mail met een link en een code. Hetzelfde kan op de beheerpagina (Accounts › nieuw).
Hoe laat ik gebruikers zelf een account maken?
Zet registration_open = yes in de serverconfiguratie (standaard no; open in de sandbox, dicht in productie volgens docs/PROFILE-PROTOCOL.md). Dan werken drie ingangen, met precies dezelfde stappen en limieten (app::register_core):
- de app:
POST /api/app/v2/register; - het inlogscherm van de pc, knop Account maken:
POST /api/pc/register, daarnaPOST /api/pc/verifymet de code; - de webpagina
https://<domein>/registreer(daarheen wijst de QR-code op het registratiescherm van de pc).
Is registreren dicht, dan krijgt de pc 403 reden=gesloten en zegt hij "vraag de beheerder".
Hoe bevestig ik mijn e-mailadres?
Met de link https://<domein>/v/<token> uit de mail (de pagina toont alleen een formulier; je typt je wachtwoord en drukt op de knop, zodat een linkvoorbeeld niets bevestigt), met de code in de app (POST /api/app/v2/verify), of met de code op de pc ("Typ de 6-cijferige code uit je mail"). Bevestigen vraagt altijd ook het wachtwoord van het account. Link en code zijn 24 uur geldig en eenmalig; de code mag hoogstens 5 keer fout zijn.
Hoe krijg ik een nieuwe bevestigingsmail?
App: POST /api/app/v2/verify/resend; pc: Code opnieuw sturen (POST /api/pc/resend, de knop telt 60 s af). Limieten: 1 per minuut en 5 per dag per adres; een nieuwe mail maakt de vorige link en code ongeldig.
Hoe wijzig ik het e-mailadres van een account?
Gebruiker: in de app (POST /api/app/v2/email {new} met een aanmelding met wachtwoord). Beheerder: user-email <adres> <nieuw adres>. Het nieuwe adres krijgt een mail; het oude blijft geldig tot het nieuwe bevestigd is en krijgt een melding.
Hoe blokkeer of deblokkeer ik een account?
user-block <email> zet de status op geblokkeerd en meldt in dezelfde transactie alle pc's af en trekt alle gekoppelde telefoons in. user-unblock <email> maakt het weer actief; de gebruiker meldt zich dan opnieuw aan en koppelt de telefoon opnieuw.
Hoe stel ik een nieuw wachtwoord in?
password <email> [--password-stdin] [--revoke-devices]: meldt alle pc's af; met --revoke-devices worden ook alle telefoons ingetrokken. Zelf een wachtwoord herstellen kan nog niet (docs/PROFILE-PROTOCOL.md: "kan later komen").
Hoe wis ik een account (AVG, recht op vergetelheid)?
user-delete <email> vraagt je het adres opnieuw te typen (--yes <email> voor scripts; dat moet hetzelfde adres zijn). Het wist de meldingen, meldt alle pc's af, trekt alle telefoons in, wist de kluis (met de opslagsleutel, waardoor de versleutelde profielmappen onleesbaar worden), de instellingen, verificaties, mailtellers, de profielen en het account. Het beheerlogboek houdt alleen een hash van het adres. De beheerpagina doet hetzelfde in twee stappen ("Ja, definitief wissen").
Kan een gebruiker zijn gegevens exporteren?
Er is geen exportopdracht in de code (alleen wissen, user-delete, en de gedeeltelijke wisopdrachten vault-delete en reports-delete). Een export voor het inzagerecht is niet gebouwd (te controleren of dat gepland is).
Waarom krijg ik dezelfde fout bij een verkeerd wachtwoord en een onbekend adres?
Met opzet: geen opsomming van accounts. Een verkeerd wachtwoord, een onbekend adres en een onbevestigd account met een verkeerd wachtwoord geven allemaal 401 onjuist, na evenveel rekenwerk (een vaste dummy-hash). Pas na het juiste wachtwoord zegt de server dat het account niet actief is (403 met de statuscode).
Details
Het adres wordt genormaliseerd (spaties weg, kleine letters, alleen ASCII; IDN-domeinen als punycode), heeft precies één @, hoogstens 254 tekens, en hoort bij hoogstens één account (crate::email::normalize).
Status per account (waarden op de lijn en in de database, Nederlands):
| Status | Betekenis | Kan inloggen |
|---|---|---|
niet_geverifieerd | nieuw, adres nog niet bevestigd | nee (email_niet_geverifieerd) |
actief | adres bevestigd | ja |
geblokkeerd | geblokkeerd door de beheerder (of door Entra-offboarding) | nee (account_geblokkeerd) |
email_ontbreekt | vangnet: een account uit schema 1 zonder @ | nee (email_ontbreekt) |
Wachtwoord: minstens 10 tekens (keys::MIN_PASSWORD), hoogstens 200 bytes (keys::MAX_PASSWORD), opgeslagen als Argon2id (19 MiB, 2 rondes, 1 thread, eigen salt van 16 bytes). In de hele server lopen hoogstens 3 wachtwoordcontroles tegelijk.
Zelf registreren antwoordt altijd 201 {user, status: "niet_geverifieerd"}, ook voor een bestaand adres (dat adres krijgt dan een melding "je hebt al een account"). Een zelf geregistreerd account dat nooit bevestigd wordt, verdwijnt na 7 dagen. Voornaam, achternaam en woonplaats (elk hoogstens 64 tekens) worden bij het account bewaard; de weergavenaam is voornaam + achternaam.
De bevestigingsmail (crate::mail) is platte tekst in het Nederlands of Engels, zonder HTML of trackingpixels. Buiten productie begint het onderwerp met (sbx) (lokaal (lokaal) ). Versturen gaat met Microsoft Graph (mail = graph), SMTP (mail = smtp) of, lokaal, naar een map (mail = map).
Beheerlogboek: user-create, user-email, user-verify, user-block, user-unblock, password en user-delete worden vastgelegd in de tabel admin_log (leesbaar met admin-log); de opgeslagen actieteksten zijn Nederlands (gebruiker-wis, …).
Naslag
CLI-opdrachten
Alle als euzos-profielserver [--config <bestand>] <opdracht>; de volledige lijst staat in CLI.
| Opdracht | Argumenten | Wat het doet |
|---|---|---|
user-create | <email> [--first-name F] [--last-name L] [--city C] [--display-name "Naam"] [--language nl|en] [--password-stdin] | account maken; mail met link en code |
user-email | <adres> <nieuw adres> | adres wijzigen (het nieuwe moet bevestigd worden) |
user-verify | <email> | noodgeval: bevestigen zonder mail (gelogd) |
user-block | <email> | blokkeren; meldt alle pc's af, trekt alle telefoons in |
user-unblock | <email> | status terug naar actief |
user-delete | <email> [--yes <email>] | AVG: het hele account wissen |
password | <email> [--password-stdin] [--revoke-devices] | nieuw wachtwoord; meldt alle pc's af |
users | — | alle accounts met hun status |
reports-delete | <email> | alle meldingen van dit account wissen (AVG) |
vault-delete | <email> | de hele kluis van het account wissen (AVG) |
Oude Nederlandse namen worden nog geaccepteerd (verborgen): gebruiker-maak, gebruiker-email, gebruiker-verifieer, gebruiker-blokkeer, gebruiker-deblokkeer, gebruiker-wis, wachtwoord, gebruikers, meldingen-wis, kluis-wis; vlaggen --voornaam, --achternaam, --woonplaats, --weergavenaam, --taal, --wachtwoord-stdin, --ja, --trek-apparaten-in.
Functies en modules
| Functie / module | Rol |
|---|---|
euzos_profileserver::email::normalize | een adres normaliseren en controleren |
euzos_profileserver::app::register_core | de ene registratieroutine voor app, pc en webpagina |
euzos_profileserver::app::register, verify, verify_resend, email_change | de eindpunten van de app |
euzos_profileserver::pc_registration::register, verify, resend | de eindpunten van de pc (regelformaat) |
euzos_profileserver::web::register_page, register, verification_page, verify | de webpagina's /registreer en /v/<token> |
euzos_profileserver::verification::create_and_send, with_code, with_token, resend, change_email, limit | link en code maken, controleren, maillimieten |
euzos_profileserver::mail | de tekst van de mails |
euzos_profileserver::gdpr::user_delete | AVG-wissen (user-delete) |
euzos_profileserver::keys | Argon2id, de wachtwoordpoort, MIN_PASSWORD/MAX_PASSWORD |
Configuratiebestanden
In de serverconfiguratie (/etc/euzos-profiel/profiel.conf op de VPS; sleutel = waarde; omgevingsvariabelen EUZOS_PROFILE_<KEY> gaan voor).
| Sleutel | Standaard | Betekenis |
|---|---|---|
registration_open (oud registratie_open) | no | zelf registreren in app, pc en webpagina |
mail | lokaal: map; sandbox/productie moeten kiezen | graph, smtp of map |
mail_dir (oud mail_map) | mail | map voor mail = map |
smtp_host, smtp_port (smtp_poort, standaard 587), smtp_user (smtp_gebruiker), smtp_password_file (smtp_wachtwoord_bestand) | — | versturen via SMTP |
graph_tenant, graph_client_id, graph_secret_file (graph_geheim_bestand) of graph_certificate_file + graph_key_file | — | versturen via Graph |
sender (oud afzender) | EUZOS <no-reply@euzos.eu> | afzenderadres |
reply_to (oud antwoordadres) | — | antwoordadres |
Configuratiesleutels op schijf en getypte bevestigingswoorden zijn sinds 27-10-2026 Engels (bijvoorbeeld
WIS-…→WIPE-…,omgeving=→environment=; docs/ENGLISH.md); de Nederlandse namen blijven geaccepteerd. De draadformaten van de profielserver (pc-regelprotocol, ondertekend profiel, ondertekende telefoonberichten, instellingssleutels) blijven Nederlands.
API-eindpunten
| Methode | Pad | Oud Nederlands pad | Doel |
|---|---|---|---|
| POST | /api/app/v2/register | /api/app/v1/registreer | registreren vanuit de app |
| POST | /api/app/v2/verify | /api/app/v1/verifieer | bevestigen met code of token + wachtwoord |
| POST | /api/app/v2/verify/resend | /api/app/v1/verifieer/opnieuw | nieuwe bevestigingsmail |
| POST | /api/app/v2/email | /api/app/v1/email | het adres wijzigen |
| POST | /api/pc/register | /api/pc/registreer | registreren op de pc |
| POST | /api/pc/verify | /api/pc/verifieer | de code bevestigen op de pc |
| POST | /api/pc/resend | /api/pc/opnieuw | de code opnieuw sturen vanaf de pc |
| GET, POST | /registreer | — (zichtbaar pad, ongewijzigd) | de registratiepagina |
| GET, POST | /v/<token> | — | de bevestigingspagina |
Alle velden van verzoek en antwoord: API.
Protocolberichten en formaten
Registreren op de pc (text/plain, regels sleutel=waarde, hoogstens 2 KiB):
POST /api/pc/register
email=… wachtwoord=… voornaam=… achternaam=… woonplaats=… taal=nl|en
→ 201 ok + email=<adres> | 400 reden=ongeldig|email_ongeldig|wachtwoord_kort
| 403 reden=gesloten | 413 | 429 te_vaak | 503 druk
POST /api/pc/verify
email=… code=<6 cijfers> wachtwoord=…
→ 200 ok | 400 reden=code_onjuist | 401 wachtwoord_onjuist | 409 email_in_gebruik | 429 te_vaak
POST /api/pc/resend
email=…
→ altijd 200 ok (geen opsomming) | 400 ongeldig | 429 reden=te_vaak
Opgeslagen hash van een verificatiecode: SHA-256("EUZOS-verificatiecode-v1\0" || adres || "\0" || code); van een linktoken: SHA-256(token).
Foutcodes van de app (JSON-veld code, waarden ongewijzigd): onjuist, email_niet_geverifieerd, account_geblokkeerd, email_ontbreekt, te_vaak, email_ongeldig, wachtwoord_kort, code_onjuist, wachtwoord_onjuist, link_ongeldig, email_in_gebruik, niet_aangemeld, druk, intern.
Zie ook
- docs/PROFILE-PROTOCOL.md, "Accounts by e-mail address"
- docs/PROFILESERVER-SETUP.md, stap 13 (e-mail versturen)
- Telefoon-app · Pc-login · CLI · API
EUZOS