Pc-inlogprotocol en offline-beleid
FAQ › Profielserver › Pc-login · English
Wat is het?
Hoe een EUZOS-pc een ondertekend profiel en een pc-token van de profielserver krijgt. Er zijn drie manieren om online in te loggen, die alle drie eindigen in hetzelfde ondertekende profiel:
- QR-code: de pc toont een QR-code; de gebruiker bevestigt op de telefoon met Face ID / vingerafdruk (
methodetelefoon, ofwebvia de webpagina als terugval); - e-mailadres en wachtwoord op de pc zelf (
methode=wachtwoord); - Microsoft-werkaccount (Entra ID, device code flow;
methode=microsoft).
Na inloggen met een wachtwoord kan het profiel ook een offline-token bevatten, zodat de pc later een beperkt aantal dagen offline kan inloggen; weer online maakt hij opnieuw verbinding (methode offline). Met het pc-token haalt de pc daarna zijn bestandenlijst op, vraagt hij zijn status (afmelden op afstand), schrijft hij instellingen terug en gebruikt hij de kluis. Het protocol tussen pc en server is platte tekst (text/plain, regels sleutel=waarde), geen JSON.
Hoe doe ik…?
Hoe werkt inloggen met de QR-code, stap voor stap?
- De pc maakt een sessie-id
S(32 hex, in de QR-code) en een pc-geheimG(32 hex, alleen in het RAM). - Hij vraagt elke 2 s
GET /api/session/S?pc=G[&voorkeur=zakelijk|prive]; de eerste vraag maakt de sessie, gebonden aan het IP van de pc enSHA-256(G). Het antwoord iswacht+code=<koppelcode>. - De QR-code is
https://<domein>/l/<S>; de telefoon-app (of de webpagina) haalt hem op; de vraag zegt dan ookgezien=1en de pc toont "Bevestig op je telefoon…". - De telefoon bevestigt (Telefoon-app); de volgende vraag krijgt
ok+ het ondertekende profiel, één keer.
Waarom verandert de QR-code elke 30 seconden?
Zodat een foto van het inlogscherm na 30 s niets meer waard is. Zolang geen telefoon de code heeft opgehaald, maakt de pc elke 30 s een nieuwe sessie en trekt hij de oude in met &intrekken=1; de server laat een niet-opgehaalde sessie ook vervallen na qr_duration (30 s). Eenmaal opgehaald blijft de sessie confirm_duration (120 s) geldig.
Hoe werkt inloggen met een wachtwoord op de pc?
POST /api/pc/login met email=, wachtwoord=, sessie=, pc=, pc-id= (+ voorkeur=). Het wachtwoord komt nooit in een URL. Antwoord: ok + het ondertekende profiel met methode=wachtwoord. Alleen bevestigde (actief) accounts. Er wordt afgeremd per account, per pc, per netwerk en per IPv6-/48, met oplopende wachttijden en een tijdelijke blokkade (429 met wacht=<seconden>). Uitzetten met pc_password = no (dan 404).
Hoe werkt "Inloggen met Microsoft"?
De pc doorloopt de device code flow bij Microsoft en stuurt alleen het ID-token: POST /api/pc/entra (id_token=, sessie=, pc=, pc-id=, taal= [, nonce=]). De server controleert het token met de sleutels van Microsoft en met de tenant en domeinen van de organisatie, koppelt of maakt het account, en antwoordt zoals bij een wachtwoord met methode=microsoft en altijd soort=zakelijk. Details in Organisaties.
Hoe wordt een pc op afstand afgemeld?
De pc vraagt GET /api/status?token=<pc-token> (ongeveer elke 30 s). Na afmelden op afstand (app: pc-sessions/<ref>/logout), blokkeren, een nieuw wachtwoord of Entra-offboarding is het antwoord afgemeld en gaat de pc terug naar het inlogscherm. Krijgt de pc 15 minuten lang geen geldig antwoord, dan meldt hij zichzelf af; hij meldt zich ook af na 12 uur ingelogd (monotone klok).
Hoe meld ik af vanaf de pc?
De pc roept GET /api/logout?token=<pc-token> aan (altijd ok), nadat hij eerst de wachtende instellingen heeft verstuurd.
Hoe blijven mijn instellingen bewaard tussen pc's?
De pc schrijft wijzigingen terug met POST /api/profile/settings?token=<pc-token> (alleen de gewijzigde sleutels, uit een vaste lijst). Het volgende ondertekende profiel bevat ze. Per gebruiker en per soort profiel (Werk of school / Privé).
Hoe wordt offline inloggen toegestaan, en hoe lang?
Het offline-beleid van de server: offline-policy '*' <dagen> voor deze omgeving of offline-policy @domein <dagen> voor een organisatie (domein van het e-mailadres; het domein gaat voor). 0 = niet toegestaan; zonder regel 14 dagen; hoogstens 30. Alleen inloggen met een wachtwoord geeft een offline-token. Zie docs/OFFLINE-LOGIN.md voor het kluisje op de pc.
Hoe neem ik offline-toegang weer af?
offline-revoke <email> (alle offline-tokens van het account), afmelden op afstand in de app (de ref van die pc), het account blokkeren of wissen, of het beleid op 0. De pc merkt het bij zijn volgende herverbinding (403) en wist zijn kluisje; zonder internet pas op de vervaldatum.
Wat zit er in de kluis?
Kleine geheimen per account en profiel, versleuteld op de server: de opslagsleutel van de versleutelde profielmap (opslag-sleutel), Microsoft-refreshtokens (ms-refresh:<32 hex>) en generaties van de profielmap (opslag-versie:<32 hex>). Alleen met een pc-token; de inhoud nooit in logboeken of in het ondertekende profiel. Beheerder: vault <email> (toont nooit de inhoud), vault-delete <email>.
Details
Pc-token: 64 hex, geldig token_duration (standaard 12 uur); de server bewaart alleen SHA-256 en de method. Niet gebonden aan het IP van de pc (CGNAT, van wifi naar kabel); de inlogsessie zelf is wel aan het IP gebonden.
Wat de pc in het profiel controleert (in deze volgorde; bij één fout weigert hij alles): eerste regel ok en versie=2; handtekening= is de laatste regel met 128 hex; de Ed25519-handtekening met de sleutel uit \EOS\FW\PROFILE.TXT (of de ingebouwde productiesleutel); omgeving= en server= kloppen; sessie= is de eigen sessie en pc= is SHA-256(eigen G); verloopt ligt in de toekomst als de klok betrouwbaar is.
Beheerbeleid in het profiel: de beheerder kan beheer=<console,sshd,log,profiel | geen> toevoegen (admin-policy <email> …); dat bepaalt welke beheeropdrachten een productie-pc toestaat. De pc kan het niet terugschrijven.
Offline-tokens: na POST /api/pc/login bevat het profiel (vóór token=) offline-dagen=<1..30>, offline-token=<64 hex> en account=<id>. De server bewaart alleen de SHA-256 met account, soort profiel, de ref van het pc-token en de vervaldatum (tabel offline_tokens). Herverbinden geeft een nieuw profiel met een nieuw herverbindtoken; het oude vervalt. Herverbinden wordt afgeremd per netwerk (120/min) en per token (10/min).
Versleuteling van de kluis: ChaCha20-Poly1305 onder de serversleutel uit vault_key_file; de bijbehorende gegevens binden een rij aan gebruiker, profiel, soort en sleutel-id. Hoogstens 9 geheimen per profiel; generaties tellen apart (16, de oudste gaat eruit). Zonder vault_key_file geven alle kluispaden 404.
Naslag
CLI-opdrachten
| Opdracht | Argumenten | Wat het doet |
|---|---|---|
pc-sessions | — | ingelogde pc's |
admin-policy | <email> [<console,sshd,log,profiel> | geen | --delete] | het beheerbeleid in het ondertekende profiel tonen/zetten/verwijderen; meldt de pc's van het account af |
offline-policy | [<*|@domein> <0..30>] | het offline-beleid tonen of zetten |
offline-policy-delete | <*|@domein> | een regel verwijderen |
offline-revoke | <email> | alle offline-tokens van het account intrekken |
offline-tokens | — | geldige offline-tokens (account, ref, profiel) |
vault | <email> | wat het account in de kluis heeft, en het kluislogboek (nooit de inhoud) |
vault-delete | <email> | de hele kluis van het account wissen |
Oude namen: pc-sessies, beheer, offline-beleid, offline-beleid-wis, offline-intrek, kluis, kluis-wis.
Functies en modules
| Functie / module | Rol |
|---|---|
euzos_profileserver::pc::session | GET /api/session/<S>: maakt, beantwoordt, trekt in, levert het profiel |
euzos_profileserver::pc::files, status, logout, settings | de eindpunten met pc-token |
euzos_profileserver::pc_login::login | inloggen met wachtwoord op de pc (afremmen, blokkade) |
euzos_profileserver::entra::login | inloggen met een Microsoft-ID-token |
euzos_profileserver::offline | offline-beleid, offline-tokens, reconnect, de CLI offline-* |
euzos_profileserver::vault::set, fetch, delete_secret, list | de kluiseindpunten; Key::encrypt/decrypt |
euzos_profileserver::settings | lijst en controle van het terugschrijven van instellingen |
euzos_profileserver::pairing_code, valid_session_id | koppelcode en controle van de sessie-id |
euzos_profileserver::web | de webpagina /l/<S> als terugval |
Kernel: kernel/src/profile.rs, libs/profile | de kant van de pc (vragen, controleren, terugschrijven) |
Configuratiebestanden
Serverconfiguratie (profiel.conf):
| Sleutel | Standaard | Betekenis |
|---|---|---|
qr_duration (oud qr_duur) | 30 s | een niet-opgehaalde inlogsessie |
confirm_duration (oud bevestig_duur) | 120 s | een opgehaalde sessie zonder goedkeuring |
token_duration (oud token_duur) | 43 200 s (12 uur) | het pc-token |
web_duration (oud web_duur) | 3 600 s | een aanmelding op de webpagina |
pc_password (oud pc_wachtwoord) | yes | inloggen met wachtwoord op de pc |
web_fallback (oud web_terugval) | yes | de webpagina /l/<S> zonder de app |
allow_v1 (oud sta_v1_toe) | lokaal yes, anders no | vragen zonder pc-geheim (het oude formaat van 8.5) |
vault_key_file (oud kluis_sleutel_bestand) | — | bestand met de kluissleutel; zonder staat de kluis uit |
entra_client_id, entra_check_s (oud entra_controle_s, standaard 900) | — | inloggen met Microsoft en de offboarding-controle |
Op de pc: \EOS\FW\PROFILE.TXT (oude naam PROFIEL.TXT) met server=, environment=, key= (publieke sleutel), optioneel key-id=, language= en private=off (de oude Nederlandse sleutels omgeving=, sleutel=, sleutel-id=, taal=, prive=uit worden nog gelezen; euzos-profielserver key toont nog die Nederlandse vorm). Een productiebuild gebruikt zijn ingebouwde server en sleutel en leest alleen private= en language=.
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 |
|---|---|---|---|
| GET | /api/session/<S>?pc=<G>[&voorkeur=][&intrekken=1] | /api/sessie/<S> | QR-inlogsessie (vragen) |
| POST | /api/pc/login | /api/pc/inloggen | inloggen met wachtwoord |
| POST | /api/pc/entra | — | inloggen met Microsoft |
| POST | /api/pc/reconnect | /api/pc/herverbind | van offline naar online |
| GET | /api/files?token= | /api/bestanden | item=-regels van het profiel |
| GET | /api/status?token= | — | ok + verloopt=, of afgemeld + reden= |
| GET | /api/logout?token= | /api/afmelden | het pc-token afmelden |
| POST | /api/profile/settings?token= | /api/profiel/instellingen | instellingen terugschrijven |
| GET | /api/vault?token= | /api/kluis | eigen soorten tonen (zonder inhoud) |
| PUT, GET, DELETE | /api/vault/<soort>?token= | /api/kluis/<soort> | een geheim opslaan, ophalen, wissen |
| GET | /l/<S>; POST /l/<S>/aanmelden, /l/<S>/bevestig; POST /uit | — (zichtbare paden) | webpagina als terugval |
| GET | /api/preference/<S> | /api/voorkeur/<S> | de voorkeur van de pc voor de webpagina |
De inhoud van verzoek en antwoord is byte voor byte gelijk op de Engelse en de oude routes.
Protocolberichten en formaten
Antwoorden op GET /api/session/<S>:
wacht + code=<6 cijfers> [+ gezien=1]
verlopen + reden=tijd|geweigerd|ingetrokken|gebruikt|niet opgehaald|geen profiel
ok + het ondertekende profiel (één keer)
Het ondertekende profiel (statuswoorden en sleutels zijn Nederlandse waarden op de lijn):
ok
versie=2
omgeving=sandbox
server=<internal-host>
sessie=<S>
pc=<SHA-256(G), 64 hex>
soort=zakelijk|prive
naam=<e-mailadres>
weergavenaam=<weergavenaam>
kleur=<6 hex>
taal=<taal>
<instellingsregels: balk=, thema=, recent=, browser-favoriet=, …>
item=<…> (0 tot 64)
beheer=<beleid> (alleen als ingesteld)
offline-dagen= / offline-token= / account= (alleen na inloggen met wachtwoord, als toegestaan)
methode=wachtwoord|microsoft|offline (niet bij een QR-login)
token=<64 hex>
uitgegeven=<Unix-tijd>
verloopt=<Unix-tijd>
sleutel-id=<16 hex>
handtekening=<128 hex>
Handtekening: Ed25519 over "EUZOS-profiel-v2\0" || alle bytes vanaf ok tot en met de \n vóór handtekening=.
Inloggen met wachtwoord (POST /api/pc/login, hoogstens 2 KiB): 200 ok + profiel; 400 reden=ongeldig; 401 reden=onjuist; 403 reden=account + status=…; 404 (uit); 413 te_groot; 429 reden=te_vaak + wacht=; 503 reden=druk|database.
Inloggen met Microsoft (POST /api/pc/entra): fouten 400 ongeldig, 401 token/verlopen, 403 tenant/domein/account, 429 te_vaak, 503 sleutels|database|druk, 404 zonder entra_client_id.
Status (GET /api/status): ok + verloopt=, of afgemeld + reden=afgemeld|verlopen|onbekend; een databasefout is 503, nooit afgemeld.
Herverbinden (POST /api/pc/reconnect, inhoud offline-token=, sessie=, pc=): 200 + nieuw profiel, of 403 reden=ingetrokken|verlopen|geblokkeerd|gewist|uit|onbekend; verder 400 ongeldig, 413 te_groot, 429 te_vaak, 503 database.
Sleutels die de pc mag terugschrijven: balk, balk-verbergen, taskbar-hide-maximized (on|off; eerst de server uitrollen, dan de kernels die hem sturen), welkom, schermtoetsenbord, toetsenbord, toetsenbord-tik, thema, touchpad-natuurlijk, touchpad-tikken, touchpad-rechtsklik, touchpad-snelheid, touchpad-aanwijzer, muis-snelheid, muis-omwisselen, muis-wiel-omkeren, pointer-size, pointer-hide, aanraak-vegen, aanraak-doorrollen, aanraak-lang-drukken, screensaver, screensaver-wachttijd, screensaver-animatie, vergrendelen, recent, taal, kleur, browser-zoekmachine, browser-favoriet, browser-engine, browser-site, mail-account (settings::KEYS). screensaver-animatie neemt logo|aurora|stars|clock; de oude waarden sterren|klok worden nog geaccepteerd. Een kernel vanaf 27-10-2026 schrijft stars/clock, dus de profielserver moet eerst uitgerold zijn (een oudere server weigert die waarden). Hoogstens 48 KiB (settings::MAX_REQUEST = 49 152 bytes) en 104 regels (settings::MAX_LINES); een ongeldige regel geeft 400 en dan verandert er niets.
Soorten in de kluis: opslag-sleutel (gemaakt door de server bij de eerste GET; PUT geeft 403; DELETE = crypto-shredding), ms-refresh:<32 hex>, opslag-versie:<32 hex> (alleen omhoog: lager geeft 409 lager). Geheimen hoogstens 8 KiB.
Zie ook
- docs/PROFILE-PROTOCOL.md, "Logging in on a PC", "The format for EUZOS", "The vault", "Tokens and expiry", "Rate limiting"
- docs/OFFLINE-LOGIN.md
- docs/WORK-LOGIN.md
- docs/ENVIRONMENTS.md
- Telefoon-app · Organisaties · API · CLI
EUZOS