Bedrijfslogin¶
Met een bedrijfslogin loggen de mensen van je organisatie in OS in met het account dat ze al bij jullie eigen identiteitsprovider hebben, zoals Microsoft Entra ID, Google Workspace of Okta, via OpenID Connect of SAML. Deze pagina laat zien hoe je een bedrijfslogin instelt, uitprobeert, verplicht maakt, wie zich zonder kan aanmelden, wie zich zelf kan aansluiten en hoe je hem weer verwijdert. Er is hiervoor nog geen scherm: een beheerder gebruikt de API van OS, met de routes die hieronder staan.
Wie wat mag¶
Een org-admin van de organisatie kan de bedrijfslogin instellen, wijzigen en verwijderen. Wie de
bedrijfslogin instelt, moet ook het domein mogen beheren waar hij bij hoort
(Rollen beheren). Elk lid kan lezen hoe de login staat.
Een organisatie heeft hoogstens één bedrijfslogin. Die hoort bij één domein dat je organisatie
heeft bewezen, bijvoorbeeld jansen.nl (Domeinen en adressen). Bewijs het
domein dus eerst.
Een OpenID Connect-login instellen¶
- Maak bij je identiteitsprovider een applicatie aan voor OS. Je krijgt een client-id en een geheim.
-
Stel de login in met
PUT /api/v1/organisations/{id}/company-loginen de kopIf-Match: "0":Veld Wat je invult kindoidcdisplay_namede naam op de inlogpagina, hoogstens 64 tekens, bijvoorbeeld Jansendomainhet bewezen domein, bijvoorbeeld jansen.nlauthorization_url,token_url,jwks_url,issuerde adressen van je provider; ze staan in het discovery-document van de provider ( /.well-known/openid-configuration)client_id,client_secretwat je provider gaf client_auth_methodclient_secret_basicofclient_secret_post, zoals je provider het vraagt -
OS antwoordt
202met de login, statuspending. Lees in het antwoordredirect_urien voeg dat adres bij je provider toe als redirect-adres van de applicatie. Het adres eindigt op/broker/os-<id van je organisatie>/endpoint.
Elk adres moet met https:// beginnen, een hostnaam noemen (geen IP-adres), geen poort behalve 443
hebben en hoogstens 2.048 tekens lang zijn. Het geheim staat in geen enkel antwoord: OS bewaart het
versleuteld tot de login actief is en gooit het dan weg.
Een SAML-login instellen¶
Stel de login in met dezelfde route en kind: saml:
| Veld | Wat je invult |
|---|---|
sso_url |
het adres voor single sign-on van je provider |
entity_id |
de entity-id van je provider |
signing_certificate |
het certificaat waarmee je provider ondertekent, in PEM; RSA van minstens 2.048 bits of EC op P-256 of sterker, niet verlopen |
display_name, domain |
zoals bij OpenID Connect |
Geef je provider daarna het adres uit metadata_url in het antwoord: daar staat alles wat je
provider over OS moet weten. OS vraagt om ondertekende antwoorden en om het e-mailadres als NameID.
Wat de status zegt¶
OS zet de login in Keycloak, de inlogdienst van OS, en leest hem daarna terug. GET
/api/v1/organisations/{id}/company-login laat zien hoe ver dat is:
status |
Betekenis |
|---|---|
pending |
OS zet de login klaar. Dat wacht tot het domein ook bij de inlogdienst bekend is, meestal enkele seconden en hoogstens een uur. |
active |
De login staat klaar. applied_version is gelijk aan version. |
failed |
De login is niet gezet; failure_reason zegt waarom. |
removing |
OS haalt de login weg. |
failure_reason |
Wat er is gebeurd, en wat je doet |
|---|---|
domain_taken |
Een andere organisatie gebruikt dit domein al voor haar login. Neem contact op met de beheerder van OS. |
refused |
De inlogdienst weigerde de instellingen. Controleer de adressen en stel de login opnieuw in. |
mismatch |
De login stond anders dan OS hem zette, of is weggehaald zonder OS. Stel hem opnieuw in, met het geheim. |
given_up |
De inlogdienst was te lang niet bereikbaar, of kende het domein na een uur nog niet. Stel de login opnieuw in. |
Weigert de inlogdienst een wijziging van een login die al werkte, dan blijft de vorige versie
werken: applied_version noemt die versie. Nam de inlogdienst de nieuwe instellingen wel aan en
mislukte daarna een volgende stap, dan gelden de nieuwe instellingen al; controleer ze en stel de
login opnieuw in, met het geheim.
De login uitproberen¶
OS roept je provider zelf nooit aan, dus er is geen knop die de login test. Probeer hem zelf: open
een privévenster, ga naar OS en log in met een adres in je domein. Het antwoord noemt ook
sign_in_hint; daarmee stuurt OS iemand meteen naar je provider. Doe dit voordat je de login
verplicht maakt.
De login verplicht maken¶
Is de login verplicht, dan komt een lid alleen in je organisatie als hij via de bedrijfslogin is
ingelogd. Zet het aan met PATCH /api/v1/organisations/{id}/company-login en
{"required": true}, met in If-Match de versie die je las.
OS weigert dat (409) zolang de login niet actief is, of als je zelf niet via de login bent
ingelogd, geen uitzondering bent en de organisatie niet van boven beheert. Zo sluit je jezelf niet
buiten met een login die niet werkt.
Een lid dat op een andere manier is ingelogd, krijgt 403 met het probleemtype
company-login-required en de sign_in_hint van je login; OS logt hem dan uit en opnieuw in via de
bedrijfslogin. Een beheerder van een partner die je organisatie van boven beheert, valt onder de
regel van zijn eigen organisatie, niet onder die van jou.
Uitzonderingen¶
Voor de dag dat je provider niet werkt, mag je hoogstens drie leden aanwijzen die ook op een andere
manier mogen inloggen. PUT /api/v1/organisations/{id}/company-login/exemptions/{membership_id}
voegt een lid toe, DELETE op hetzelfde adres haalt hem weg. Het antwoord noemt ze onder
exemptions. Een uitzondering vervalt als het lidmaatschap wordt gedeactiveerd of verwijderd. Elke
keer dat een uitzondering op een andere manier inlogt, staat in het auditlog.
Je kunt ook iemand uitnodigen van wie het adres buiten het domein van je login valt, zoals een
externe adviseur, met een van de drie uitzonderingen: "company_login_exempt": true in de body van
POST /api/v1/organisations/{id}/invitations. De uitnodiging telt dan mee voor de drie en staat
meteen onder exemptions; de persoon houdt de uitzondering bij het accepteren, en ze vervalt als de
uitnodiging wordt ingetrokken of verloopt.
Zelf aansluiten¶
joining bepaalt wat er gebeurt met iemand die via de bedrijfslogin inlogt met een adres in je
domein, maar nog geen lid is:
joining |
Wat er gebeurt |
|---|---|
invitation (standaard) |
OS zegt dat hij een beheerder om een uitnodiging moet vragen (Mensen uitnodigen). |
automatic |
OS biedt aan om lid te worden, met alleen de rol member. |
Wijzig het met PATCH en {"joining": "automatic"}. Aansluiten werkt ook voor iemand die voor het
eerst via de bedrijfslogin inlogt: OS neemt zijn adres daarvoor aan omdat het in je bewezen domein
ligt en hij via jullie eigen login binnenkwam.
De login wijzigen¶
Stuur de hele login opnieuw met PUT, met in If-Match de versie die je las, en het geheim
erbij. Het soort (oidc of saml) kan niet veranderen; haal de login dan weg en stel een nieuwe
in. Tot de inlogdienst de wijziging aanneemt, blijft de vorige versie werken.
De login verwijderen¶
DELETE /api/v1/organisations/{id}/company-login, met If-Match, haalt de login weg. Hij is dan
meteen niet meer verplicht en de uitzonderingen vervallen. De leden en hun accounts blijven: wie
ook een wachtwoord heeft, logt daarmee in; wie alleen via de bedrijfslogin inlogde, stelt een
wachtwoord in via Wachtwoord vergeten? op de inlogpagina. Geef je het domein op, dan verdwijnt de
login vanzelf mee (Domeinen en adressen).
Wanneer OS weigert¶
| Antwoord | Betekenis |
|---|---|
409 |
If-Match noemt een andere versie, of "0" terwijl er al een login is; het soort veranderde; de login wordt verwijderd; een vierde uitzondering; verplicht maken terwijl dat nog niet kan. |
422 |
If-Match ontbreekt; het domein is niet bewezen; een adres, het certificaat of het geheim voldoet niet aan de regels hierboven. |
503 |
OS kan het geheim nu niet veilig bewaren. Probeer het later opnieuw. |
Wat OS bewaakt¶
OS controleert elke vijf minuten of je login in de inlogdienst nog staat zoals OS hem zette, en zet terug wat iemand buiten OS veranderde. Daar hoef je niets voor te doen. Elke wijziging die je maakt, staat in het auditlog, zonder het geheim.