Naar hoofdinhoud
Joinly by KoppelHet

Entra ID en Active Directory

De juiste toegang begint met goede medewerkersgegevens

Een medewerker wisselt van afdeling, maar houdt zijn oude rechten. Of iemand start op maandag en mist zijn Microsoft 365-licentie. Vaak ligt dat aan een veld dat niet klopt. In dit artikel ontdek je welke gebruikersattributen echt belangrijk zijn, wat er misgaat als ze leeg blijven en hoe je ze controleert.

Waarom een kleine fout in HR grote gevolgen kan hebben

Je kunt de mooiste automatisering bouwen, maar als de afdeling of startdatum niet klopt, krijgt iemand alsnog de verkeerde toegang. Daarom begint betrouwbaar gebruikersbeheer bij de gegevens waarop Entra ID zijn beslissingen baseert.

Het gebruikersobject in Microsoft Entra ID heeft tientallen eigenschappen, de Entra ID user attributes. De meeste zijn voor het adresboek: telefoonnummer, straat, postcode. Een kleine groep doet meer. Die velden worden gelezen door functies die zelf iets doen: een dynamische groep die iemand toevoegt, een licentie die wordt toegewezen, een workflow die op een datum start, een goedkeuring die naar de leidinggevende gaat.

Dat maakt ze tot de invoer van je hele automatisering. Een regel als user.department -eq "Finance" is precies zo goed als het veld department. Staat daar "Financien", "Fin." of niets, dan valt iemand buiten de groep, zonder foutmelding. Hoe je zulke regels schrijft, lees je in dynamische groepen op basis van HR-attributen. Dit artikel gaat over de velden zelf: welke ertoe doen, waar ze vandaan komen en hoe je controleert of ze kloppen.

Twee velden laten we hier bewust liggen: de userPrincipalName en het e-mailadres. Hoe je die opbouwt en wat je doet als iemand van naam verandert, staat in naamgeving van accounts.

Deze gebruikersgegevens bepalen wie toegang krijgt

Niet ieder veld is even belangrijk. Dit zijn de gegevens die direct invloed hebben op accounts, rechten, licenties en workflows.

Attribuut, wie het leest en wat er gebeurt als het leeg is
AttribuutWie leest hetAls het leeg of fout is
departmentDynamische groepen, het adresboek, filters in GraphIemand valt buiten de afdelingsgroep en mist de rechten en de licentie die daaraan hangen.
jobTitleDynamische groepen, het adresboek en het profielFunctiegebonden groepen vullen zich niet; collega's zien een verouderde functie.
usageLocationLicentietoewijzingEen directe licentie lukt niet. Via een groep neemt Entra ID het land van de tenant, wat voor een medewerker in het buitenland een fout kan geven.
employeeIdKoppelingen met HR, dynamische groepen, scriptsJe kunt het account niet betrouwbaar aan de medewerker in HR koppelen. Bij een naamswijziging of een tweede Jan de Vries gaat het mis.
employeeHireDateLifecycle Workflows (joiner), dynamische groepen (preview)De onboardingworkflow heeft geen datum om op te starten.
employeeLeaveDateTimeLifecycle Workflows (leaver)De offboardingworkflow start niet. Het account blijft open tot iemand het met de hand dichtzet.
managerGoedkeuringen, Lifecycle Workflows, het organigram, de regel Direct ReportsEen aanvraag weet niet naar wie hij moet; het organigram heeft een gat; de groep "team van X" klopt niet.
companyNameDynamische groepen, het adresboekBij meerdere werkmaatschappijen kun je niet op bedrijf scheiden.
employeeTypeJe eigen scripts en rapportagesJe kunt medewerkers, inhuur en stagiairs niet uit elkaar houden.
accountEnabledAanmelden, Conditional Access, rapportagesEen vertrokken medewerker die nog op true staat, kan nog inloggen.

Startdatum, vertrekdatum en leidinggevende: drie velden met grote impact

Juist deze gegevens veranderen regelmatig. En als niemand ze bijwerkt, merkt IT dat vaak pas wanneer een onboarding of goedkeuring vastloopt.

`employeeHireDate` en `employeeLeaveDateTime` zijn de twee velden waarop Lifecycle Workflows plannen. Een joiner-workflow draait een aantal dagen voor of op de startdatum, een leaver-workflow op of na de vertrekdatum. Het tijdstip telt mee. Workflows draaien niet eerder dan het tijdstip in het veld, en de tenant verwerkt ze volgens een eigen schema dat standaard elke drie uur loopt. Microsoft raadt daarom een tijd vroeg op de dag aan voor de startdatum en laat op de dag voor de vertrekdatum.

Het schrijven van employeeLeaveDateTime is beter afgeschermd dan de andere velden. Een app heeft de toestemming User-LifeCycleInfo.ReadWrite.All nodig, en wie het veld met de hand in een gedelegeerde sessie zet, heeft de rol Global Administrator nodig. Lezen kan met de rol Lifecycle Workflows Administrator of Global Reader. Wie dat niet weet, zoekt lang naar de reden dat een script het veld niet kan zetten.

`manager` verwijst naar een ander gebruikersobject; er staat geen naam in. Je zet hem met een aparte aanroep, en hij klopt pas als de leidinggevende zelf een account heeft. Het organigram in Microsoft 365, de goedkeuringen in access packages, de taken in Lifecycle Workflows die de manager mailen en de dynamische regel Direct Reports for lezen allemaal deze verwijzing. Na een reorganisatie is het het veld dat het langst verkeerd blijft staan.

Velden zetten met Microsoft Graph PowerShell, inclusief de manager
Connect-MgGraph -Scopes "User.ReadWrite.All"

$upn = "jan.jansen@bedrijf.nl"
Update-MgUser -UserId $upn `
  -Department "Financiële administratie" `
  -JobTitle "Medewerker crediteuren" `
  -EmployeeId "100482" `
  -UsageLocation "NL" `
  -EmployeeHireDate "2026-12-01T05:00:00Z"

$manager = Get-MgUser -UserId "petra.smit@bedrijf.nl"
Set-MgUserManagerByRef -UserId $upn -BodyParameter @{
  "@odata.id" = "https://graph.microsoft.com/v1.0/users/$($manager.Id)"
}

Extra gegevens vastleggen zonder een wirwar aan velden

Soms heb je meer nodig dan de standaardvelden, bijvoorbeeld een kostenplaats. Microsoft biedt daarvoor twee plekken. Ze lijken op elkaar en worden vaak door elkaar gehaald.

extensionAttribute1 t/m 15Directory-extensies
HerkomstDe Exchange custom attributes uit AD op locatieJe registreert ze zelf op een app-registratie in Entra ID
NaamVast: extensionAttribute1 tot en met extensionAttribute15extension_<appId zonder streepjes>_<naam>, bijvoorbeeld extension_b7d8e6..._kostenplaats
AantalVijftien, niet uit te breidenMaximaal 100 per object
TypeTekst, tot 1024 tekensTekst, getal, datum en meer
Bij een gesynchroniseerde gebruikerAlleen-lezen in Graph, je past ze in AD aanKunnen vanuit AD meekomen als je ze in de sync aanzet
In een dynamische regelJa, als user.extensionAttribute15Ja, als user.extension_<appId>_<naam>

Gebruik je de vijftien extension attributes, leg dan ergens vast welke waarvoor dient. De namen zeggen niets, en een tweede beheerder die extensionAttribute7 "vrij" vindt, overschrijft zonder het te weten de kostenplaats waar drie dynamische groepen op draaien. Microsoft wijst er ook op dat je hier geen gevoelige persoonsgegevens in zet, zoals een BSN of medische gegevens.

Waar je ze aanpast: in AD of in Entra ID

Bij een hybride omgeving is dit het eerste waar beheerders op vastlopen. Een gebruiker die uit Active Directory wordt gesynchroniseerd, heeft AD als bron. Velden als department, jobTitle en de extension attributes pas je dan in AD aan; in Entra ID zijn ze voor dat account alleen-lezen, en de volgende synchronisatie zou je wijziging toch overschrijven. Hoe die sync werkt en wat de source of authority per object betekent, lees je in Entra Connect of Cloud Sync.

Het AD-attribuut en waar het in Entra ID terechtkomt
Active DirectoryMicrosoft Entra IDOpmerking
departmentdepartmentStandaard gesynchroniseerd
titlejobTitleAndere naam aan beide kanten
companycompanyNameStandaard gesynchroniseerd
physicalDeliveryOfficeNameofficeLocationIn dynamische regels heet hij physicalDeliveryOfficeName
employeeIDemployeeIdStandaard gesynchroniseerd
managermanagerKomt alleen goed over als de manager zelf ook wordt gesynchroniseerd
extensionAttribute1-15onPremisesExtensionAttributesStandaard gesynchroniseerd
Geen eigen attribuutemployeeHireDate, employeeLeaveDateTimeJe kiest een vrij tekstveld in AD, zoals msDS-cloudExtensionAttribute1, in het formaat yyyyMMddHHmmss.fZ, en zet een syncregel op

Controleer of Entra ID dezelfde werkelijkheid ziet als HR

Een eenmalige controle helpt, maar het is nog beter als wijzigingen vanuit HR automatisch worden doorgegeven.

Begin met een overzicht van actieve accounts waar een van de sturende velden ontbreekt. Dat zijn de mensen bij wie de automatisering nu al stil faalt.

Actieve gebruikers met een leeg sturend veld, als CSV
Connect-MgGraph -Scopes "User.Read.All","User-LifeCycleInfo.Read.All"

$velden = "Id","UserPrincipalName","AccountEnabled","Department","JobTitle",
          "UsageLocation","EmployeeId","EmployeeHireDate","UserType"

Get-MgUser -All -Property $velden -ExpandProperty Manager |
  Where-Object { $_.AccountEnabled -and $_.UserType -eq "Member" } |
  Where-Object { -not $_.Department -or -not $_.JobTitle -or -not $_.UsageLocation -or
                 -not $_.EmployeeId -or -not $_.Manager } |
  Select-Object UserPrincipalName, Department, JobTitle, UsageLocation, EmployeeId,
    @{ n = "Manager"; e = { $_.Manager.AdditionalProperties.userPrincipalName } } |
  Export-Csv .\ontbrekende-attributen.csv -NoTypeInformation -Encoding UTF8
  1. Draai het overzicht en sorteer op afdeling. Lege velden zitten zelden willekeurig verspreid: vaak is het één team, één vestiging of iedereen die na een bepaalde datum is begonnen.
  2. Kijk naar de spelling. Tel per department hoeveel mensen er in staan. "ICT", "IT" en "I.C.T." naast elkaar betekent drie dynamische groepen die elk een deel missen.
  3. Leg vast welk systeem de bron is per veld. Voor afdeling, functie, datum in dienst en leidinggevende is dat bijna altijd het HR-systeem, niet de beheerder die het account aanmaakt.
  4. Herhaal de controle maandelijks. Een veld dat bij aanmaak klopte, klopt na de eerste overplaatsing vaak niet meer.

Joinly

Van correcte gegevens naar toegang die vanzelf meebeweegt

Je wilt niet dat IT bij iedere functiewijziging opnieuw afdeling, manager, groepen en licenties moet nalopen. Met Joinly gebruik je de gegevens die HR toch al bijhoudt als uitgangspunt. Een nieuwe functie of afdeling wordt verwerkt in Entra ID en, waar nodig, in Active Directory. De bijbehorende rollen en rechten kunnen vervolgens mee veranderen.

Zo wordt een correct department-veld meer dan een nette vermelding in het adresboek: het helpt bepalen wat iemand nodig heeft om te werken. In Joinly kun je terugzien welke wijzigingen vanuit HR zijn verwerkt.

Het lifecycle-overzicht in Joinly: accounts die elke HR-mutatie automatisch volgenOntdek identity lifecycle management in Joinly

Waar je op kunt rekenen

  • Geen vendor lock-inJe identiteiten en je inrichting blijven van jou.
  • Je data eruit wanneer je wiltJe kunt je gegevens op elk moment exporteren.
  • Standaard SLAOnze standaard SLA is opvraagbaar.
  • Begeleiding bij de implementatieOnze specialisten richten het samen met je in.
  • ISO 27001-gecertificeerdInformatiebeveiliging volgens een internationaal erkende norm.

Gebruikersattributen

Veelgestelde vragen

  • Wat is het verschil tussen employeeId en het object-ID in Entra ID?

    Het object-ID is een GUID die Entra ID zelf toekent en die nooit verandert. `employeeId` is jouw eigen personeelsnummer, maximaal 16 tekens, en is de sleutel waarmee je het account aan de medewerker in HR koppelt. Het object-ID weet niets van HR; het personeelsnummer wel.

  • Waarom kan ik de afdeling van een gebruiker niet aanpassen in Entra ID?

    Omdat het account uit Active Directory wordt gesynchroniseerd. Dan is AD de bron, en zijn velden als `department` en `jobTitle` in Entra ID alleen-lezen. Pas het veld in AD aan; de volgende synchronisatie neemt het mee.

  • Wat moet ik invullen bij usage location?

    De landcode van twee letters van het land waar de medewerker de diensten gebruikt, bijvoorbeeld `NL` of `BE`. Zonder usage location kun je geen licentie direct toewijzen, en bij een licentie via een groep neemt Entra ID het land van de tenant.

  • Hoe zet ik employeeHireDate vanuit Active Directory?

    AD heeft geen eigen attribuut voor de startdatum. Je kiest een vrij tekstveld, bijvoorbeeld `msDS-cloudExtensionAttribute1`, vult het in het formaat `yyyyMMddHHmmss.fZ` en maakt een syncregel die het naar `employeeHireDate` stuurt. Recente versies van Entra Connect hebben `employeeHireDate` al in de standaard uitgaande regel, de inkomende regel maak je zelf.

  • Mag ik extensionAttribute1 tot en met 15 vrij gebruiken?

    Ja, ze zijn voor je eigen gegevens bedoeld, maar ze hebben geen naam die zegt waarvoor ze dienen. Leg vast welk nummer waarvoor is, want een collega die een "leeg" attribuut hergebruikt, breekt de groepen die erop draaien. Zet er geen gevoelige persoonsgegevens in.

Probeer Joinly bovenop je eigen Microsoft-omgeving

Rollen, workflows, externen en een auditlog voor Entra ID en Active Directory. Begin met demodata in de gratis proefomgeving.

Geen creditcard, geen installatie.

Liever eerst een gesprek? Praat met een IAM-specialist