Ga naar inhoud

Een eigen inlogprovider instellen met een sleutel

Wat een eigen inlogprovider is en voor wie hij werkt, staat in Organisaties en klanten.

Een sleutel met de capability management laat de beheerders van zijn eigen organisatie inloggen in de console via de identity provider van die organisatie: OpenID Connect, Google Workspace of Microsoft Entra ID. Hoe je management aanzet, staat in Je organisatie beheren met een sleutel. Zonder die capability antwoordt elke route op deze pagina 404.

De routes gaan alleen over de eigen organisatie van de sleutel. Voor een organisatie onder je stel je het in in de console, of met een sleutel die je in die organisatie registreert (Werken in een organisatie onder je).

Vier regels gelden bij elke provider:

  • Niemand krijgt een account door in te loggen. Alleen wie de organisatie al als beheerder heeft uitgenodigd kan zo inloggen, herkend aan het e-mailadres dat de provider heeft geverifieerd.
  • De tweede factor van de provider telt. Vraagt de provider om een code, dan vraagt de console er geen tweede.
  • Wie beheerder is van meer dan één organisatie, kan via de provider van geen enkele organisatie inloggen en logt in met een wachtwoord.
  • Een provider verwijderen verwijdert geen accounts. Wie ook een wachtwoord heeft, logt daar nog mee in.

Een e-maildomein bewijzen

Een provider laat alleen adressen inloggen in een e-maildomein waarvan de organisatie heeft bewezen dat het van haar is. Een provider registreren voor een organisatie die nog geen domein bewees, wordt geweigerd. Claim eerst het domein:

curl -s -X POST "$CORE_URL/organisation/email-domains" \
    -H "Authorization: Bearer $CORE_KEY" -H "Content-Type: application/json" \
    -d '{"domain": "example.com"}'

Het antwoord (201) noemt het TXT-record dat het domein bewijst:

{
  "object": "email_domain",
  "domain": "example.com",
  "verified": false,
  "proof_record_name": "_artific-challenge.example.com",
  "proof_record_value": "<willekeurige waarde>",
  "verified_at": null,
  "created_at": "2026-10-07T09:12:00Z"
}

Publiceer bij wie de DNS van je domein beheert een TXT-record op proof_record_name met proof_record_value als waarde. Vraag daarna om de controle:

curl -s -X POST "$CORE_URL/organisation/email-domains/example.com/verify" \
    -H "Authorization: Bearer $CORE_KEY"

Het antwoord is hetzelfde domein met verified: true en verified_at ingevuld. Een domein dat al bewezen is, opnieuw laten controleren verandert niets. GET /organisation/email-domains toont alle geclaimde domeinen in één pagina; een organisatie claimt er hoogstens vijftig.

Antwoord Betekenis Wat je doet
422 op domain bij het claimen een wildcard, een topleveldomein of een gedeeld mailboxdomein zoals gmail.com claim het domein van je eigen organisatie
409 bij het claimen je organisatie claimt het al, een andere organisatie heeft het al bewezen, je organisatie claimt er al vijftig, of je organisatie wordt gewist geef een domein op dat je niet meer nodig hebt, of gebruik het domein dat je al hebt
422 op domain bij de controle het TXT-record is nog niet gevonden wacht tot je DNS is bijgewerkt en vraag het opnieuw
409 bij de controle een andere organisatie bewees het domein eerder, of je organisatie wordt gewist het domein kan hier niet van jou zijn; geef de claim op
503 bij de controle de DNS van het domein kon niet op tijd worden gelezen, of het accountbeheer is tijdelijk niet beschikbaar probeer het opnieuw
404 dit domein is niet door je organisatie geclaimd claim het eerst

DELETE /organisation/email-domains/example.com geeft het domein op (204). Je provider laat daar meteen niemand meer inloggen; accounts blijven bestaan. Antwoordt het 503, dan staat de claim nog; stuur hetzelfde verzoek later opnieuw.

De hosts van de provider toestaan

De inlogdienst praat namens je organisatie met de provider, dus de organisatie moet de hosts van de provider toestaan voordat je hem registreert:

kind Toe te staan hosts
oidc de host van de issuer, en de hosts die zijn discovery-document noemt voor tokens, sleutels en gebruikersgegevens -- meestal dezelfde
google oauth2.googleapis.com, openidconnect.googleapis.com en www.googleapis.com
entra login.microsoftonline.com

Voeg elke host toe met POST /organisation/allowed-hosts:

curl -s -X POST "$CORE_URL/organisation/allowed-hosts" \
    -H "Authorization: Bearer $CORE_KEY" -H "Content-Type: application/json" \
    -d '{"host": "login.microsoftonline.com"}'

Dat antwoordt 403 zolang de organisatie erboven het sleutelbeheer voor zichzelf houdt (Voorbehouden sleutelbeheer); vraag die organisatie dan de host toe te staan.

Een provider registreren

PUT /organisation/sign-in-providers/{name} maakt de provider met die naam aan, of vervangt hem. De naam bestaat uit kleine letters, cijfers en koppeltekens, hoogstens 32 tekens, niet aan het begin of einde een koppelteken. Hij komt in het redirect-adres, dus kies hem eenmalig.

curl -s -X PUT "$CORE_URL/organisation/sign-in-providers/entra" \
    -H "Authorization: Bearer $CORE_KEY" -H "Content-Type: application/json" \
    -d '{
          "kind": "entra",
          "directory_id": "8c1f5a2e-3b4d-4e6f-9a0b-1c2d3e4f5a6b",
          "client_id": "<client-id bij je provider>",
          "client_secret": "<client secret bij je provider>",
          "display_name": "Jansen"
        }'

kind bepaalt welk ene veld de body daarnaast draagt:

kind Veld Wat het doet
oidc issuer, een https-adres Core leest het discovery-document onder <issuer>/.well-known/openid-configuration. De ID-tokens van de provider moeten email_verified: true dragen.
google hosted_domain Alleen accounts van dit Workspace-domein loggen in; persoonlijke Google-accounts worden geweigerd. Het moet een domein zijn dat je organisatie heeft bewezen.
entra directory_id, een UUID Alleen accounts van die directory loggen in. De ID-tokens moeten de optionele claims email en xms_edov dragen.

client_id en client_secret zijn die van de client die je bij je provider voor deze console aanmaakte; display_name is optioneel. Het secret komt nooit terug in een antwoord. Een vervanging draagt het opnieuw mee: zonder client_secret wordt de body geweigerd.

Het antwoord (200) is de provider zoals hij nu staat:

{
  "object": "sign_in_provider",
  "name": "entra",
  "kind": "entra",
  "issuer": "https://login.microsoftonline.com/8c1f5a2e-3b4d-4e6f-9a0b-1c2d3e4f5a6b/v2.0",
  "hosted_domain": null,
  "directory_id": "8c1f5a2e-3b4d-4e6f-9a0b-1c2d3e4f5a6b",
  "client_id": "<client-id bij je provider>",
  "display_name": "Jansen",
  "enabled": true,
  "sign_in_hint": "org.ten_8f2c41.entra",
  "redirect_uri": "https://login.example.com/realms/artific/broker/org.ten_8f2c41.entra/endpoint"
}
Antwoord Betekenis Wat je doet
409 de organisatie heeft nog geen e-maildomein bewezen, heeft al tien providers, of wordt gewist bewijs een domein, of verwijder een provider
422 op name de naam volgt de regel hierboven niet kies een andere naam
422 op issuer, directory_id of kind een host van de provider is niet toegestaan of wordt door de installatie geblokkeerd, of er was geen discovery-document te lezen sta de hosts toe en controleer het adres
422 op hosted_domain het Workspace-domein is geen domein dat je organisatie bewees bewijs het eerst
503 accountbeheer is even niet bereikbaar probeer het opnieuw

Het antwoord geeft twee dingen die je verder nodig hebt:

  • redirect_uri registreer je bij je client van de provider als toegestaan redirect-adres. De provider werkt pas zodra dat is gebeurd. Vroeg de provider om een redirect-adres voordat je de client kon aanmaken, maak hem dan aan met een tijdelijk adres, registreer de provider hier en vervang het tijdelijke adres door redirect_uri.
  • sign_in_hint maakt de inloglink. De gewone inlogpagina toont de providers van geen enkele organisatie, dus geef je beheerders het inlogadres van de console met de hint erin: https://<adres-van-de-console>/nl/login?provider=org.ten_8f2c41.entra (of /en/ voor de Engelse console). Wie de link opent, gaat rechtstreeks naar je provider (Inloggen).

Providers lezen, wijzigen en verwijderen

Verzoek Doet
GET /organisation/sign-in-providers alle providers van de organisatie, in één pagina; het zijn er hoogstens tien
GET /organisation/sign-in-providers/{name} één provider, met zijn redirect_uri en sign_in_hint; 404 als hij niet bestaat
PUT /organisation/sign-in-providers/{name} vervangt hem; stuur de hele body opnieuw, client_secret inbegrepen
DELETE /organisation/sign-in-providers/{name} niemand logt er nog mee in (204); accounts blijven zoals ze zijn

Elke registratie en verwijdering komt als beheergebeurtenis op het spoor van de organisatie (Beheergebeurtenissen), zonder het secret.