Ga naar inhoud

Docs/Integraties/SCIM provisioning

SCIM provisioning

Gebruikers automatisch aanmaken, bijwerken en deactiveren in Curriculate vanuit je identity provider via SCIM 2.0.

IntegratiesTenantbeheer≈ 20 min setup Versie 2026.05

Curriculate biedt een SCIM 2.0-endpoint zodat de IT-beheerder van een school of organisatie gebruikers in zijn eigen tenant kan aanmaken, bijwerken en deactiveren vanuit een identity provider (IdP) — zonder dat de Curriculate-supportafdeling tussenkomst nodig heeft.

Werkt met elke SCIM 2.0-compatibele provider, met geteste setups voor Microsoft Entra ID en Google Workspace.

  • Je hebt de rol admin binnen je tenant in Curriculate. Alleen tenant-admins kunnen SCIM-tokens beheren.
  • Je hebt beheerderstoegang tot je identity provider (Entra ID of Google Workspace).
  • De gebruikers in je IdP hebben een e-mailadres, voornaam en achternaam ingevuld — dit zijn de attributen die Curriculate gebruikt.
  1. Log in op Curriculate en ga naar Instellingen → SCIM tokens.

  2. Klik op Create token.

  3. Geef het token een herkenbare naam, bijvoorbeeld Entra ID productie of Google Workspace. De naam is alleen voor jouzelf — om later te zien welk token bij welke IdP hoort.

  4. Klik op Create token. Je krijgt nu eenmalig het volledige token te zien in een melding Token created. Het token begint altijd met scim_, bijvoorbeeld:

    scim_aBc123XyZ...
  5. Kopieer het token direct. Curriculate slaat alleen een hash op — je kunt het token later niet meer inzien. Bewaar het veilig (bijvoorbeeld in een wachtwoordkluis) en plak het straks in je IdP.

Je SCIM-endpoint heeft altijd de vorm:

https://<jouw-curriculate-domein>/scim/v2

Voor de productieomgeving is dat doorgaans:

https://app.curriculate.nl/scim/v2

Dit is de Tenant URL die je IdP nodig heeft. Je hoeft hier geen organisatie-id of slug aan toe te voegen — Curriculate herkent je tenant automatisch aan het bearer token.

  1. Open de Microsoft Entra admin centerIdentity → Applications → Enterprise applications.

  2. Klik op New application → Create your own application. Kies Integrate any other application you don’t find in the gallery (Non-gallery), geef de app een naam (bijv. Curriculate) en maak deze aan.

  3. Open de nieuwe applicatie en ga naar Provisioning. Kies bij Provisioning Mode voor Automatic.

  4. Vul onder Admin Credentials in:

    VeldWaarde
    Tenant URLhttps://app.curriculate.nl/scim/v2
    Secret TokenHet token uit stap 1 (begint met scim_)
  5. Klik op Test Connection. Entra ID controleert nu of de credentials geldig zijn. Krijg je een groene melding, ga dan verder. Krijg je een foutmelding, controleer dan het token en de URL.

  6. Open Mappings → Provision Microsoft Entra ID Users en zorg dat minimaal de volgende attributen worden gemapt (default mapping voldoet meestal):

    Entra-attribuutSCIM-attribuut
    userPrincipalNameuserName
    displayNamedisplayName
    givenNamename.givenName
    surnamename.familyName
    mailemails[type eq "work"].value
    Switch([IsSoftDeleted], , "False", "True", "True", "False")active
    objectIdexternalId
  7. Onder Settings zet je Provisioning Status op On en kies je een Scope (alle gebruikers, of enkel toegewezen gebruikers/groepen).

  8. Sla op. Entra ID start binnen 40 minuten met de eerste cyclus, of je kunt handmatig Provision on demand uitvoeren om één gebruiker direct te testen.

Na het inschakelen van provisioning verschijnen nieuwe gebruikers automatisch in Curriculate onder Instellingen → Gebruikers.

Controleer:

  • Nieuwe gebruiker in je IdP → verschijnt binnen enkele minuten in Curriculate.
  • Voornaam of achternaam wijzigen in je IdP → wordt bijgewerkt in Curriculate.
  • Gebruiker deactiveren in je IdP → active wordt false in Curriculate; de gebruiker kan niet meer inloggen.
  • Gebruiker verwijderen uit je IdP → de gebruiker wordt uit Curriculate verwijderd (afhankelijk van de deprovisioning-instellingen van je IdP).

Curriculate bewaart de volgende velden via SCIM. Andere SCIM-attributen worden genegeerd.

SCIM-attribuutCurriculate-veldSchrijfbaarToelichting
userNameE-mailadresJaVerplicht; uniek per tenant.
displayNameVolledige naamJaVerplicht.
name.givenNameVoornaamJa
name.familyNameAchternaamJa
emails[0].valueE-mailadresJaEerste primaire work e-mail wordt gebruikt.
activeActiefJafalse deactiveert de gebruiker.
externalIdExterne IDJaAanbevolen — voor stabiele koppeling.
idCurriculate-IDNeeDoor Curriculate toegekend (UUID).
meta.createdAangemaakt opNeeISO 8601.
meta.lastModifiedBijgewerkt opNeeISO 8601.

Alle endpoints staan onder https://app.curriculate.nl/scim/v2/... en verwachten:

Authorization: Bearer scim_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept: application/scim+json
Content-Type: application/scim+json
MethodePadDoel
GET/scim/v2/ServiceProviderConfigOndersteunde features.
GET/scim/v2/SchemasLijst van schema’s.
GET/scim/v2/ResourceTypesBeschikbare resource types (alleen User).
MethodePadDoel
GET/scim/v2/UsersLijst gebruikers in je tenant. Ondersteunt filter, startIndex, count.
POST/scim/v2/UsersMaak een gebruiker aan in je tenant.
GET/scim/v2/Users/{id}Eén gebruiker ophalen.
PUT/scim/v2/Users/{id}Volledige vervanging van een gebruiker.
PATCH/scim/v2/Users/{id}Partiële update via Operations (op: replace).
DELETE/scim/v2/Users/{id}Verwijder een gebruiker definitief.

Paginering: standaard count is 25, maximum is 200.

Filter-voorbeelden (standaard SCIM-syntax):

?filter=userName eq "docent@school.nl"
?filter=active eq true
?filter=externalId eq "abc-123"
POST /scim/v2/Users HTTP/1.1
Host: app.curriculate.nl
Authorization: Bearer scim_xxx...
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "j.dejong@school.nl",
"displayName": "Jan de Jong",
"name": {
"givenName": "Jan",
"familyName": "de Jong"
},
"emails": [
{ "value": "j.dejong@school.nl", "type": "work", "primary": true }
],
"active": true,
"externalId": "entra-7f3c..."
}

Antwoord: 201 Created met de volledige SCIM-resource, inclusief de toegekende id.

PATCH /scim/v2/Users/{id} HTTP/1.1
Authorization: Bearer scim_xxx...
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "replace", "path": "active", "value": false }
]
}

Alle fouten volgen de SCIM 2.0 error-schema:

{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "401",
"detail": "Invalid SCIM token."
}
CodeWanneer
401Ontbrekend, ongeldig of ingetrokken bearer token.
403Tenant is gearchiveerd.
404Resource bestaat niet of hoort bij een andere tenant.
409Conflict, bijvoorbeeld een dubbel userName.
400Validatiefout in het verzoek.

Wil je een token intrekken (bijvoorbeeld bij vertrek van een beheerder of bij een vermoeden van lekken)?

  1. Ga naar Instellingen → SCIM tokens.
  2. Klik op Revoke naast het betreffende token.
  3. Vanaf dat moment leveren alle SCIM-verzoeken met dit token een 401-fout op. Ingetrokken tokens blijven zichtbaar in de lijst zodat je kunt zien wanneer ze actief waren.
  • Geen Groups-resource. Rollen worden in Curriculate beheerd, niet via SCIM.
  • Geen wachtwoord. Authenticatie gebeurt via magic links.
  • DELETE is permanent. Wil je een gebruiker tijdelijk uitschakelen, gebruik dan PATCH met active = false.
  • Eén tenant per token. Het token bepaalt onomstotelijk om welke tenant het gaat — cross-tenant verzoeken leveren 404 op.
  • Responses zijn “flat”. Curriculate gebruikt omit_main_schema_in_return zodat het hoofd-schema niet opnieuw in elke response wordt opgenomen — dit is conform RFC 7644 §3.3.2 en werkt out-of-the-box met Entra ID en Google.