Files
Pivot/services/handleidingen_standaard.py
2026-10-14 13:34:37 +02:00

348 lines
24 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Handleidingen die PIVOT meelevert. Bij het opstarten komt elke handleiding waarvan de slug nog niet bestaat in de
tabel Handleidingen. Daarna pas je ze aan in PIVOT zelf (📘 Handleidingen › Bewerken); wijzigingen hier overschrijven niets.
Een verwijderde handleiding blijft verborgen (Zichtbaar = 'weg') en komt dus niet terug.
"""
TWEESTAPS_UITZONDERING = """
<p>Met deze handleiding stel je in Google Admin alles in zodat PIVOT iemand <strong>tijdelijk zonder 2FA</strong> (tot 23:59 dezelfde dag) kan laten inloggen
(uitzondering) en 2FA kan <strong>resetten</strong> bij een nieuwe telefoon. Je doet dit één keer per domein; daarna enkel opnieuw
als er een organisatie-eenheid (OU) bijkomt.</p>
<div class="info"><strong>Hoe werkt het?</strong> PIVOT zet een gebruiker in de groep <em>2fa-uitzondering</em>. Voor die groep staat
"Afdwingen" op <strong>Uit</strong>. Zolang de gebruiker in de groep zit, mag hij zonder 2FA inloggen. Om 23:59 dezelfde dag haalt PIVOT
hem er automatisch weer uit.</div>
<h2 id="stap-1">Stap 1 – De groep aanmaken</h2>
<ol>
<li>Ga naar <a href="https://admin.google.com" target="_blank">admin.google.com</a> › <strong>Directory › Groepen</strong> › <strong>Groep maken</strong>.</li>
<li>Naam: <code>2fa-uitzondering</code>, e-mailadres: <code>2fa-uitzondering@jouwdomein.be</code>.</li>
<li>Bij de instellingen van de groep:
<ul>
<li>Wie kan lid worden: <strong>Alleen uitgenodigde gebruikers</strong>.</li>
<li>Wie kan berichten plaatsen: <strong>Groepseigenaren</strong> (de groep dient niet om te mailen).</li>
<li>Wie kan leden bekijken: <strong>Groepsbeheerders</strong>.</li>
</ul>
</li>
<li>Voeg zelf <strong>geen</strong> vaste leden toe. PIVOT voegt mensen toe en haalt ze er weer uit.</li>
</ol>
<h2 id="stap-2">Stap 2 – 2FA uitzetten voor de groep, in élke OU waar 2FA verplicht is</h2>
<div class="let-op"><strong>Let op:</strong> een 2FA-instelling op een <strong>onderliggende OU gaat altijd vóór</strong> een groepsinstelling
hoger in de boom. Stel de groep daarom in bij <strong>elke OU waar 2FA afgedwongen wordt</strong>, ook bij sub-OU's.</div>
<ol>
<li>Ga naar <strong>Beveiliging › Authenticatie › Verificatie in 2 stappen</strong> (2-Step Verification).</li>
<li>Kies links onder <strong>Organisatie-eenheden</strong> de OU, bv. <em>GO-Antwerpen</em>. Klap met het pijltje open om sub-OU's te zien.</li>
<li>Klik links onderaan bij <strong>Groepen</strong> op de groep <em>2fa-uitzondering</em> (of voeg ze toe via "Groepen zoeken").
Bovenaan moet nu staan: <em>"Instellingen tonen voor gebruikers in <strong>[jouw OU]</strong> (organisatie-eenheid) die zich ook in
<strong>2fa-uitzondering</strong> (groep) bevinden"</em>.</li>
<li>Laat <strong>Gebruikers toestaan tweestapsverificatie aan te zetten</strong> aangevinkt.</li>
<li>Zet <strong>Afdwingen</strong> op <strong>Uit</strong>.</li>
<li>Klik op <strong>Overschrijven</strong> (of Opslaan). Onder "Verificatie" moet nu <strong>Overschreven</strong> staan, niet "Overgenomen".</li>
<li>Herhaal stap 2 tot 6 voor elke OU en sub-OU waar 2FA op <strong>Aan</strong> staat.</li>
</ol>
<div class="tip"><strong>Tip:</strong> per OU kan je maar één groep instellen. Gebruik daarom overal dezelfde groep <em>2fa-uitzondering</em>.</div>
<h2 id="stap-3">Stap 3 – Rechten voor PIVOT (domeinbrede delegatie)</h2>
<ol>
<li>Ga naar <strong>Beveiliging › Toegangs- en gegevensbeheer › API-beheer › Domeinbrede delegatie beheren</strong>.</li>
<li>Klik bij het service-account van PIVOT op <strong>Bewerken</strong>.</li>
<li>Controleer dat minstens deze scopes erbij staan (in het veld gescheiden door komma's):
<ul>
<li><code>https://www.googleapis.com/auth/admin.directory.user</code></li>
<li><code>https://www.googleapis.com/auth/admin.directory.user.security</code> (2FA resetten, back-upcodes)</li>
<li><code>https://www.googleapis.com/auth/admin.directory.group.member</code> (in/uit de groep zetten)</li>
<li><code>https://www.googleapis.com/auth/admin.directory.orgunit</code></li>
</ul>
</li>
<li>Klik op <strong>Autoriseren</strong>. Het kan enkele minuten duren voor Google dit toepast.</li>
</ol>
<h2 id="stap-4">Stap 4 – De groep invullen in PIVOT</h2>
<ol>
<li>Open in PIVOT <strong>🔌 Koppelingen van deze school › 🛡️ 2FA-hulp</strong>.</li>
<li>Vul bij <strong>Uitzonderingsgroep</strong> het e-mailadres van de groep in: <code>2fa-uitzondering@jouwdomein.be</code>.</li>
<li>Opslaan en <strong>Testen</strong>.</li>
</ol>
<h2 id="stap-5">Stap 5 – Testen met een testaccount</h2>
<ol>
<li>Geef in PIVOT (🛡️ 2FA-hulp) een testgebruiker een tijdelijke uitzondering (loopt tot 23:59).</li>
<li>Kijk in Google Admin bij <strong>Gebruikers › [testgebruiker] › Groepen</strong>: <em>2fa-uitzondering</em> moet in de lijst staan.</li>
<li>Kijk bij <strong>Gebruikers › [testgebruiker] › Beveiliging › Tweestapsverificatie</strong>.
Zolang daar <strong>"Afgedwongen in uw hele organisatie"</strong> staat, heeft Google de uitzondering nog niet toegepast.</li>
</ol>
<div class="let-op"><strong>Geduld:</strong> Google past een nieuwe groepsinstelling meestal binnen enkele minuten toe, maar het kan
<strong>tot 24 uur</strong> duren, zeker bij een nieuwe groep of een nieuw account. PIVOT blijft een 2FA-reset elke minuut opnieuw proberen
zolang de uitzondering loopt.</div>
<h2 id="nieuwe-telefoon">Iemand heeft een nieuwe telefoon</h2>
<p>Gebruik eerst een <strong>back-upcode</strong>: die werkt meteen, ook als 2FA afgedwongen wordt.</p>
<ol>
<li>PIVOT: 🛡️ 2FA-hulp › zoek de gebruiker › <strong>Back-upcodes tonen / aanmaken</strong>
(of in Google Admin: Gebruikers › gebruiker › Beveiliging › Tweestapsverificatie › <em>Back-upverificatiecodes ophalen</em>).</li>
<li>Geef de gebruiker één code. Hij logt in met zijn wachtwoord en die code.</li>
<li>Daarna koppelt hij zijn nieuwe telefoon via <a href="https://myaccount.google.com/security" target="_blank">myaccount.google.com › Beveiliging</a>
› Verificatie in 2 stappen.</li>
</ol>
<p>Lukt dat niet, gebruik dan in PIVOT <strong>📵 2FA resetten</strong>. PIVOT zet de gebruiker dan in de uitzonderingsgroep en zet 2FA uit
zodra Google de uitzondering toepast.</p>
<h2 id="problemen">Problemen oplossen</h2>
<table>
<thead><tr><th>Wat zie je?</th><th>Oorzaak</th><th>Oplossing</th></tr></thead>
<tbody>
<tr><td>Gebruiker zit in de groep, maar 2FA blijft "Afgedwongen"</td>
<td>De gebruiker staat in een (sub-)OU waar de groep niet ingesteld is, of Google past de instelling nog toe.</td>
<td>Controleer de OU van de gebruiker (Gebruikers › gebruiker, links onder "Organisatie-eenheid") en voer stap 2 uit voor
precies die OU. Wacht anders tot 24 uur.</td></tr>
<tr><td>"2-Step Verification cannot be turned off: … enforced"</td>
<td>Google dwingt 2FA nog af voor deze gebruiker.</td>
<td>Zie hierboven. PIVOT probeert automatisch opnieuw.</td></tr>
<tr><td>"Google weigert de toegang" / unauthorized_client</td>
<td>Een scope ontbreekt.</td><td>Stap 3.</td></tr>
<tr><td>"Gebruiker of groep niet gevonden"</td>
<td>Het e-mailadres van de groep in PIVOT klopt niet.</td><td>Stap 4.</td></tr>
</tbody>
</table>
"""
MAIL_DELEGATIE = """
<p>Met deze handleiding stel je Google Admin zo in dat PIVOT (<strong>✉️ Mailbox-delegatie</strong>) iemand toegang kan geven tot de
mailbox van iemand anders, bv. het secretariaat tot de mailbox van de directie. De gedelegeerde kan dan lezen, versturen en verwijderen
namens de eigenaar, maar kent het wachtwoord niet en kan de instellingen niet wijzigen.</p>
<h2 id="stap-1">Stap 1 – Maildelegatie toelaten</h2>
<ol>
<li>Ga naar <a href="https://admin.google.com" target="_blank">admin.google.com</a> › <strong>Apps › Google Workspace › Gmail › Gebruikersinstellingen</strong>.</li>
<li>Kies links de <strong>organisatie-eenheid</strong> van de mailboxen die gedeeld moeten worden (bv. <em>GO-Antwerpen</em>).
Kies de hoogste OU als het voor iedereen mag; sub-OU's nemen de instelling over, tenzij ze ze zelf overschrijven.</li>
<li>Open het onderdeel <strong>Maildelegatie</strong> (Mail delegation).</li>
<li>Vink aan: <strong>Gebruikers toestaan toegang tot hun mailbox te delegeren aan andere gebruikers in het domein</strong>.</li>
<li>Kies hoe verzonden mails getoond worden:
<ul>
<li><strong>De accounteigenaar en de gedelegeerde die de e-mail heeft verzonden tonen</strong> (aangeraden: de ontvanger ziet wie echt schreef), of</li>
<li><strong>Alleen de accounteigenaar tonen</strong>.</li>
</ul>
</li>
<li>Klik op <strong>Opslaan</strong>.</li>
</ol>
<div class="let-op"><strong>Let op:</strong> staat maildelegatie in een sub-OU op "Overschreven" en uit, dan werkt delegatie daar niet,
ook al staat ze hoger in de boom aan. Controleer de OU van de mailbox-eigenaar.</div>
<h2 id="stap-2">Stap 2 – Gmail API aanzetten (eenmalig)</h2>
<ol>
<li>Ga naar <a href="https://console.cloud.google.com/apis/library/gmail.googleapis.com" target="_blank">console.cloud.google.com › API's › Gmail API</a>.</li>
<li>Kies bovenaan het project van het PIVOT-service-account.</li>
<li>Klik op <strong>Inschakelen</strong> (staat er "Beheren", dan is het al aan).</li>
</ol>
<h2 id="stap-3">Stap 3 – Rechten voor PIVOT (domeinbrede delegatie)</h2>
<ol>
<li>Ga in Google Admin naar <strong>Beveiliging › Toegangs- en gegevensbeheer › API-beheer › Domeinbrede delegatie beheren</strong>.</li>
<li>Klik bij het service-account van PIVOT op <strong>Bewerken</strong>.</li>
<li>Voeg deze twee scopes toe aan de bestaande lijst (gescheiden door komma's; verwijder de andere niet):
<ul>
<li><code>https://www.googleapis.com/auth/gmail.settings.sharing</code> (delegatie toevoegen en verwijderen)</li>
<li><code>https://www.googleapis.com/auth/gmail.settings.basic</code> (bestaande delegaties tonen)</li>
</ul>
</li>
<li>Klik op <strong>Autoriseren</strong>.</li>
</ol>
<div class="tip"><strong>Tip:</strong> ontbreekt <em>gmail.settings.basic</em>, dan kan PIVOT wel delegaties toevoegen maar de lijst niet tonen
("insufficient authentication scopes").</div>
<h2 id="stap-4">Stap 4 – Rechten in PIVOT</h2>
<ol>
<li>Geef wie delegaties mag beheren het recht <strong>Mailbox-delegatie</strong> in de juiste school
(⚙️ Beheer › 🔐 Gebruikers &amp; rechten › 🔐 Rechten).</li>
<li>Test in <strong>✉️ Mailbox-delegatie</strong> met twee testaccounts: geef account B toegang tot de mailbox van account A.</li>
</ol>
<h2 id="werking">Goed om te weten</h2>
<ul>
<li>Een delegatie via PIVOT werkt meestal na <strong>ongeveer een minuut</strong>. De gedelegeerde hoeft niets te bevestigen.</li>
<li>Een nieuwe instelling in Google Admin (stap 1) kan <strong>tot 24 uur</strong> duren voor ze overal geldt.</li>
<li>De gedelegeerde opent de mailbox in Gmail via zijn <strong>profielfoto rechtsboven</strong> › de gedeelde mailbox kiezen.</li>
<li>Eigenaar en gedelegeerde moeten in <strong>dezelfde Google Workspace-organisatie</strong> zitten. Gebruik het
<strong>primaire e-mailadres</strong>, geen alias.</li>
<li>Een mailbox kan maximaal <strong>25 gedelegeerden</strong> hebben; iemand kan maximaal <strong>10 mailboxen</strong> openen
(Google kan deze limieten per organisatie anders instellen).</li>
</ul>
<h2 id="problemen">Problemen oplossen</h2>
<table>
<thead><tr><th>Wat zie je?</th><th>Oorzaak</th><th>Oplossing</th></tr></thead>
<tbody>
<tr><td>"insufficient authentication scopes" bij het tonen</td><td><em>gmail.settings.basic</em> ontbreekt.</td><td>Stap 3.</td></tr>
<tr><td>"unauthorized_client" / Google weigert de toegang</td><td><em>gmail.settings.sharing</em> ontbreekt of is nog niet toegepast.</td>
<td>Stap 3, en enkele minuten wachten.</td></tr>
<tr><td>Gmail API has not been used / is disabled</td><td>Gmail API staat uit in het Cloud-project.</td><td>Stap 2.</td></tr>
<tr><td>Toevoegen mislukt voor één persoon, voor anderen lukt het</td>
<td>Maildelegatie staat uit in de OU van die mailbox-eigenaar, of er zijn al 25 gedelegeerden.</td><td>Stap 1 voor die OU.</td></tr>
<tr><td>Gedelegeerde ziet de mailbox niet</td><td>Nog niet toegepast, of hij kijkt niet via zijn profielfoto.</td>
<td>Even wachten, opnieuw inloggen in Gmail.</td></tr>
</tbody>
</table>
"""
GOOGLE_KOPPELING = """
<p>PIVOT praat met Google via een <strong>serviceaccount</strong>: een technisch account in Google Cloud dat namens een beheerder
(bv. <code>ict@school.be</code>) handelt. Daarvoor zijn er drie plaatsen: <strong>Google Cloud Console</strong> (project, API's,
serviceaccount, sleutel), <strong>Google Admin</strong> (domeinbrede delegatie) en <strong>PIVOT</strong> (sleutel uploaden).
Optioneel stel je ook <strong>Inloggen met Google</strong> in.</p>
<div class="info"><strong>Wie?</strong> Je hebt een account nodig dat in Google Cloud projecten mag aanmaken en in Google Admin
<strong>superbeheerder</strong> is. Je doet dit één keer; meerdere scholen in hetzelfde Google-domein mogen dezelfde sleutel gebruiken.</div>
<h2 id="stap-1">Stap 1 – Project aanmaken</h2>
<ol>
<li>Ga naar <a href="https://console.cloud.google.com" target="_blank">console.cloud.google.com</a> en log in met je beheerdersaccount.</li>
<li>Klik bovenaan op de projectkiezer › <strong>Nieuw project</strong>.</li>
<li>Naam: bv. <code>PIVOT</code>. Organisatie: jullie domein. Klik op <strong>Maken</strong>.</li>
<li>Controleer bovenaan dat het nieuwe project gekozen is voor je verder gaat.</li>
</ol>
<h2 id="stap-2">Stap 2 – API's inschakelen</h2>
<p>Ga naar <strong>API's en services › Bibliotheek</strong>, zoek elke API en klik op <strong>Inschakelen</strong>:</p>
<table>
<thead><tr><th>API</th><th>Nodig voor</th></tr></thead>
<tbody>
<tr><td><strong>Admin SDK API</strong></td><td>Gebruikers, wachtwoorden, OU's, Chromebooks, groepen, 2FA</td></tr>
<tr><td><strong>Gmail API</strong></td><td>Mailbox-delegatie</td></tr>
<tr><td><strong>Enterprise License Manager API</strong></td><td>Google-licenties</td></tr>
<tr><td><strong>Groups Settings API</strong></td><td>Verzendlijsten: wie mag mailen naar de lijst</td></tr>
</tbody>
</table>
<h2 id="stap-3">Stap 3 – Serviceaccount aanmaken</h2>
<ol>
<li>Ga naar <strong>IAM en beheer › Serviceaccounts</strong> › <strong>Serviceaccount maken</strong>.</li>
<li>Naam: bv. <code>pivot</code>. Klik op <strong>Maken en doorgaan</strong>.</li>
<li>De stappen "Rollen" en "Gebruikerstoegang" laat je <strong>leeg</strong> (PIVOT werkt via domeinbrede delegatie, niet via
Cloud-rollen). Klik op <strong>Klaar</strong>.</li>
<li>Open het serviceaccount en noteer de <strong>Unieke ID</strong> (een lang getal, ook "OAuth 2-client-ID" genoemd).
Die heb je nodig in stap 5.</li>
</ol>
<h2 id="stap-4">Stap 4 – JSON-sleutel maken</h2>
<ol>
<li>Open het serviceaccount › tabblad <strong>Sleutels</strong> › <strong>Sleutel toevoegen › Nieuwe sleutel maken</strong>.</li>
<li>Kies <strong>JSON</strong> › <strong>Maken</strong>. Het bestand wordt gedownload.</li>
<li>Bewaar het veilig: wie dit bestand heeft, kan alles wat PIVOT kan. Verwijder het van je pc na stap 6.</li>
</ol>
<div class="let-op"><strong>"Het maken van serviceaccountsleutels is uitgeschakeld"?</strong> Nieuwe Google Cloud-organisaties blokkeren
sleutels standaard met de organisatiebeleidsregel <code>iam.disableServiceAccountKeyCreation</code>
(of <code>iam.managed.disableServiceAccountKeyCreation</code>). Zet ze uit voor <strong>enkel dit project</strong>:
<ol>
<li>Geef jezelf op organisatieniveau de rol <strong>Beheerder van organisatiebeleid</strong> (Organization Policy Administrator)
via IAM en beheer › IAM (kies bovenaan de organisatie, niet het project).</li>
<li>Kies bovenaan opnieuw het project PIVOT › <strong>IAM en beheer › Organisatiebeleid</strong>.</li>
<li>Zoek <code>disableServiceAccountKeyCreation</code> › <strong>Beleid beheren</strong> › <strong>Beleid van bovenliggend item
overschrijven</strong> › regel toevoegen › <strong>Afdwingen: Uit</strong> › <strong>Beleid instellen</strong>.</li>
<li>Wacht enkele minuten (soms tot een uur) en probeer stap 4 opnieuw.</li>
</ol>
</div>
<h2 id="stap-5">Stap 5 – Domeinbrede delegatie in Google Admin</h2>
<ol>
<li>Ga naar <a href="https://admin.google.com" target="_blank">admin.google.com</a> › <strong>Beveiliging › Toegangs- en
gegevensbeheer › API-beheer</strong> › <strong>Domeinbrede delegatie beheren</strong>.</li>
<li>Klik op <strong>Nieuwe toevoegen</strong>.</li>
<li>Client-ID: de <strong>Unieke ID</strong> uit stap 3 (PIVOT toont ze ook na het uploaden van de sleutel).</li>
<li>OAuth-bereiken: plak deze regel in zijn geheel:
<pre><code>https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.user.security,https://www.googleapis.com/auth/admin.directory.group.member,https://www.googleapis.com/auth/admin.directory.orgunit,https://www.googleapis.com/auth/admin.directory.device.chromeos,https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly,https://www.googleapis.com/auth/admin.directory.device.mobile,https://www.googleapis.com/auth/admin.directory.device.mobile.readonly,https://www.googleapis.com/auth/apps.licensing,https://www.googleapis.com/auth/gmail.settings.sharing,https://www.googleapis.com/auth/gmail.settings.basic,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/apps.groups.settings,https://www.googleapis.com/auth/gmail.modify,https://www.googleapis.com/auth/contacts,https://www.googleapis.com/auth/drive</code></pre>
</li>
<li>Klik op <strong>Autoriseren</strong>. Het kan enkele minuten duren voor Google dit toepast.</li>
</ol>
<table>
<thead><tr><th>Scope (zonder https://www.googleapis.com/auth/)</th><th>Waarvoor in PIVOT</th></tr></thead>
<tbody>
<tr><td><code>admin.directory.user</code></td><td>Accounts aanmaken, wachtwoord resetten, leerlingen</td></tr>
<tr><td><code>admin.directory.user.security</code></td><td>2FA: back-upcodes, 2FA resetten</td></tr>
<tr><td><code>admin.directory.group.member</code></td><td>2FA-uitzonderingsgroep</td></tr>
<tr><td><code>admin.directory.orgunit</code></td><td>Organisatie-eenheden</td></tr>
<tr><td><code>admin.directory.device.chromeos</code> (+ <code>.readonly</code>)</td><td>Chromebooks blokkeren/deblokkeren, opzoeken</td></tr>
<tr><td><code>admin.directory.device.mobile</code> (+ <code>.readonly</code>)</td><td>Mobiele toestellen</td></tr>
<tr><td><code>apps.licensing</code></td><td>Google-licenties</td></tr>
<tr><td><code>gmail.settings.sharing</code></td><td>Mailbox-delegatie toevoegen/verwijderen</td></tr>
<tr><td><code>gmail.settings.basic</code></td><td>Mailbox-delegaties tonen, Gmail-handtekeningen instellen</td></tr>
<tr><td><code>gmail.modify</code></td><td>E-mails met een label kopiëren/verplaatsen naar een andere mailbox</td></tr>
<tr><td><code>drive</code></td><td>Gedeelde drives: overzicht, leden en rechten (Google Drive API moet aanstaan)</td></tr>
<tr><td><code>contacts</code></td><td>Contactlijsten in de mailboxen van gebruikers (People API moet aanstaan)</td></tr>
</tbody>
</table>
<div class="tip"><strong>Tip:</strong> Bestaat er al een regel voor deze client-ID, klik dan op <strong>Bewerken</strong> en
vervang de lijst; anders heb je er twee.</div>
<h2 id="stap-6">Stap 6 – Sleutel en beheerder instellen in PIVOT</h2>
<ol>
<li>Open in PIVOT <strong>🏫 Alle scholen beheren</strong> › de school › <strong>Bewerken</strong>
(of <strong>🔌 Koppelingen van deze school</strong>).</li>
<li>Bij <strong>Algemeen › Beheerder (Google-admin)</strong>: het account waarnamens PIVOT werkt, bv. <code>ict@school.be</code>.
Dit moet een <strong>superbeheerder</strong> zijn (of een beheerder met de nodige rechten) in Google Admin.</li>
<li>Bij <strong>🔑 Google Workspace › Serviceaccount (JSON-sleutel)</strong>: upload het JSON-bestand uit stap 4.
PIVOT bewaart het versleuteld en toont daarna het e-mailadres en de client-ID van het serviceaccount.</li>
<li>Opslaan, en daarna op <strong>🩺 Testen</strong> klikken. Alles in orde? Verwijder het JSON-bestand van je pc.</li>
</ol>
<h2 id="stap-7">Stap 7 (optioneel) – Inloggen met Google</h2>
<p>Hiermee loggen leerkrachten en PIVOT-gebruikers in met hun Google-account in plaats van een wachtwoord.</p>
<ol>
<li>In de Cloud Console (zelfde project): <strong>API's en services › OAuth-toestemmingsscherm</strong>
(in de nieuwe versie: <strong>Google Auth Platform › Branding</strong>). Kies als doelgroep <strong>Intern</strong>,
app-naam <code>PIVOT</code>, ondersteunings-e-mail en je ontwikkelaarsadres. Opslaan.</li>
<li><strong>Inloggegevens</strong> (of Google Auth Platform › <strong>Clients</strong>) › <strong>Inloggegevens maken › OAuth-client-ID</strong>.</li>
<li>Type: <strong>Webapplicatie</strong>, naam <code>PIVOT login</code>.</li>
<li>Bij <strong>Geautoriseerde omleidings-URI's</strong>: het adres van PIVOT + <code>/callback</code>,
bv. <code>https://pivot.school.be/callback</code>. Gebruik je meerdere adressen (per school een eigen hostnaam), voeg ze allemaal toe.</li>
<li>Klik op <strong>Maken</strong> en kopieer de <strong>client-ID</strong> en het <strong>clientgeheim</strong>.</li>
<li>In PIVOT: vul ze in bij de school onder <strong>🔑 Google Workspace › Google-login client-ID / client-secret</strong>,
of één keer voor alle scholen in <code>config.ini</code> onder <code>[google_sso]</code>.</li>
</ol>
<h2 id="problemen">Problemen oplossen</h2>
<table>
<thead><tr><th>Wat zie je?</th><th>Oorzaak</th><th>Oplossing</th></tr></thead>
<tbody>
<tr><td><code>unauthorized_client</code> / "Client is unauthorized to retrieve access tokens"</td>
<td>Client-ID of scope ontbreekt in de domeinbrede delegatie, of nog niet toegepast.</td>
<td>Stap 5 nakijken (juiste Unieke ID, alle scopes), enkele minuten wachten.</td></tr>
<tr><td>"Invalid Input" / "Not Authorized to access this resource"</td>
<td>Het beheerdersaccount klopt niet of is geen beheerder.</td><td>Stap 6, Beheerder (Google-admin).</td></tr>
<tr><td>"&lt;API&gt; has not been used in project … or it is disabled"</td>
<td>De API staat niet aan.</td><td>Stap 2, in het juiste project.</td></tr>
<tr><td>"insufficient authentication scopes"</td><td>Eén scope ontbreekt (vaak een Gmail-scope).</td><td>Stap 5.</td></tr>
<tr><td>"redirect_uri_mismatch" bij inloggen met Google</td>
<td>Het adres van PIVOT staat niet bij de omleidings-URI's.</td>
<td>Stap 7.4: exact hetzelfde adres (https, hostnaam, <code>/callback</code>).</td></tr>
<tr><td>Sleutel maken lukt niet</td><td>Organisatiebeleid blokkeert sleutels.</td><td>Kader bij stap 4.</td></tr>
</tbody>
</table>
"""
STANDAARD = [
{
'slug': 'google-koppeling-cloud-console',
'titel': 'Google-koppeling instellen (Google Cloud Console)',
'categorie': 'Google Workspace',
'samenvatting': 'Project, API\'s, serviceaccount en JSON-sleutel, domeinbrede delegatie met alle scopes, '
'sleutel in PIVOT en inloggen met Google.',
'inhoud': GOOGLE_KOPPELING,
},
{
'slug': '2fa-uitzondering-google-admin',
'titel': '2FA-uitzondering instellen in Google Admin',
'categorie': 'Google Workspace',
'samenvatting': 'Groep 2fa-uitzondering aanmaken, 2FA uitzetten per OU, rechten voor PIVOT en testen.',
'inhoud': TWEESTAPS_UITZONDERING,
},
{
'slug': 'mailbox-delegatie-google-admin',
'titel': 'Mailbox-delegatie instellen in Google Admin',
'categorie': 'Google Workspace',
'samenvatting': 'Maildelegatie toelaten per OU, Gmail API, scopes voor PIVOT en testen.',
'inhoud': MAIL_DELEGATIE,
},
]