Chapter 05 — The Canonical Attribute Schema
Chapter 05 — The Canonical Attribute Schema
Native attributes first. A small, coded set of extension attributes for access. Nothing hand-edited.
The design rules behind the schema. The schema table itself, which every other page on this site links to instead of repeating. Why three extension attributes, and why they hold codes. How the hire and leave dates reach Entra ID from each landing zone. Who is allowed to write any of it.
Design rules
- Use a native Entra attribute wherever one exists.
employeeId,department,jobTitle,companyName,manager,employeeType,employeeHireDate,employeeLeaveDateTimeandemployeeOrgDataalready mean what the HR record means. Other Microsoft features (the org chart, Lifecycle Workflows, access-package approvals) read them directly. - Add an extension attribute only where access needs a value a rule can’t read natively. Rules for dynamic membership support a fixed list of user properties. That list includes
department,companyName,jobTitle,employeeId,employeeHireDate(preview),userTypeandaccountEnabled, plusextensionAttribute1–15and directory extension properties. It doesn’t includeemployeeType,employeeOrgDataormanager(direct-reports groups use a separate rule form).1 Three attributes cover the gap. - Put codes in access attributes, never display strings. An organization code changes only when the business fact changes; a display name changes whenever someone retypes it.
- Use the same carrier in both landing zones.
extensionAttribute1–15exist in on-premises AD and in Entra ID. For synced users, AD is the source and the Entra values are read-only; for cloud-only users they can be set when the user is created or updated.2 A rule written againstuser.extensionAttribute10works the same for a hybrid user and a cloud-mastered one, which matters during the years of coexistence. - Don’t build an organizational hierarchy into attributes. The reporting line is the
managerrelationship; organizational placement isdepartment,employeeOrgDataand one organization code. There’s no encoded path, tree or composite key to maintain.
The schema
| Canonical field | Oracle HCM source | SCIM attribute | On-premises AD | Entra ID | Rule can read it | Used for |
|---|---|---|---|---|---|---|
| Person number | workers.PersonNumber |
externalId |
employeeID |
employeeId |
Yes | Match key, identifier for life (Chapter 03) |
| Employment active | Assignment status | active |
accountDisabled |
accountEnabled |
Yes | Joiner and leaver state |
| Given name / surname | workers.names |
name.givenName / name.familyName |
givenName / sn |
givenName / surname |
Yes | Display, UPN rules |
| Display name | workers.DisplayName |
displayName |
cn |
displayName |
Yes | Display only, never access |
| Department | Department name | enterprise department |
department |
department |
Yes | Display, address book, coarse scoping |
| Division | Business unit | enterprise division |
division |
employeeOrgData.division |
No | Reporting, profile card |
| Cost center | Cost center | enterprise costCenter |
— | employeeOrgData.costCenter |
No | Chargeback, reporting |
| Legal employer | Legal employer | enterprise organization |
company |
companyName |
Yes | Agency or component |
| Manager | Manager’s person number | enterprise manager |
manager (DN) |
manager |
Direct-reports rule only | Supervisory chain, approvals, reviewers |
| Job title | JobName |
title |
title |
jobTitle |
Yes | Display; not an access input |
| Worker type | Worker type / person type | custom extension workerType |
employeeType |
employeeType |
No | Employee, contractor, intern, volunteer |
| Hire date | Effective start date | custom extension HireDate |
extensionAttribute2 |
employeeHireDate |
Yes (preview) | Joiner workflow trigger |
| Leave date | Termination effective date | custom extension TermDate |
extensionAttribute3 |
employeeLeaveDateTime |
No | Leaver workflow trigger |
| Work country | Work address country | addresses[type eq "work"].country |
co |
country |
Yes | Address; source for the usageLocation expression that licensing needs |
| Organization code | Department ID (code) | custom extension orgCode |
extensionAttribute10 |
extensionAttribute10 |
Yes | Access targeting |
| Worker type code | Worker type (code) | custom extension workerTypeCode |
extensionAttribute11 |
extensionAttribute11 |
Yes | Access targeting; mirrors employeeType |
| Position category | Job family or position category (code) | custom extension positionCategory |
extensionAttribute12 |
extensionAttribute12 |
Yes | Access targeting |
Notes on the table:
- The SCIM mappings for both landing zones follow the example worksheets in Microsoft’s Oracle HCM integration guide, which also maps a custom
JobCodetoextensionAttribute1in both AD and Entra ID. Custom attributes are added to the provisioning app’s schema as SCIM schema extensions and then mapped.34 For attributes with no AD equivalent, the same guide says to useextensionAttribute1–15or extend the AD schema.5 - Neither date has a native AD attribute. For AD-landed users, Microsoft’s Oracle HCM worksheet writes
HireDateandTermDatetoextensionAttribute2andextensionAttribute3;6 a sync rule then maps each one toemployeeHireDateoremployeeLeaveDateTimein Entra ID. The AD attribute must be a string, and the value must be converted to the format Entra expects, usually with a date-format expression. Inbound provisioning, Entra Connect cloud sync and Entra Connect Sync all support both target attributes.7 - The choice of
extensionAttribute10–12for access codes is this series’ decision, not a Microsoft default. Before Phase 1 closes, confirm that each one is in the provisioning app’s target attribute list and isn’t already used. Exchange callsextensionAttribute1–15custom attributes 1–15.8 - Rules can’t use multi-value extension properties.9 All three access attributes hold one code.
Writers
A dynamic membership rule moves the access decision to whoever can write the attribute it reads. Microsoft’s guidance is to check write permissions for every attribute a rule uses, in Entra ID and in any source directory, and to restrict self-service write access to attributes used in security-sensitive groups.10 For this schema that means:
- The only writer of every field above is the provisioning service: the API-driven inbound app for cloud-mastered users, the provisioning agent plus Entra Connect for AD-mastered ones.
- Remove help-desk, self-service and Exchange-admin write paths to
extensionAttribute10–12and to the two date carriers. In AD, review the ACLs on the target OUs; in Exchange, the custom-attribute cmdlets are a write path. - Any write by another principal is a drift event (Chapter 09).
How other pages use this schema
The SQL Server Identity Transformation series, Book 07 applies the same attribute-to-access discipline to SQL Server logins and database roles. The AD → Entra ID Identity Modernization Guide and the Conditional Access library link here rather than carrying their own attribute map.
Footnotes
Microsoft Learn, “Manage rules for dynamic membership groups in Microsoft Entra ID” (supported properties; extension attributes and custom extension properties; security consideration on attribute write permissions), https://learn.microsoft.com/en-us/entra/identity/users/groups-dynamic-membership (accessed Oct 19, 2026).↩︎
Microsoft Graph, “onPremisesExtensionAttributes resource type,” https://learn.microsoft.com/en-us/graph/api/resources/onpremisesextensionattributes (accessed Oct 19, 2026).↩︎
Microsoft Learn, “Configure Oracle Human Capital Management (HCM) for automatic user provisioning,” https://learn.microsoft.com/en-us/entra/identity/saas-apps/oracle-hcm-provisioning-tutorial (accessed Oct 19, 2026).↩︎
Microsoft Learn, “Extend API-driven provisioning to sync custom attributes,” https://learn.microsoft.com/en-us/entra/identity/app-provisioning/inbound-provisioning-api-custom-attributes (accessed Oct 19, 2026).↩︎
Microsoft Learn, “Configure Oracle Human Capital Management (HCM) for automatic user provisioning,” https://learn.microsoft.com/en-us/entra/identity/saas-apps/oracle-hcm-provisioning-tutorial (accessed Oct 19, 2026).↩︎
Microsoft Learn, “Configure Oracle Human Capital Management (HCM) for automatic user provisioning,” https://learn.microsoft.com/en-us/entra/identity/saas-apps/oracle-hcm-provisioning-tutorial (accessed Oct 19, 2026).↩︎
Microsoft Learn, “How to synchronize attributes for Lifecycle Workflows,” https://learn.microsoft.com/en-us/entra/id-governance/how-to-lifecycle-workflow-sync-attributes (accessed Oct 19, 2026).↩︎
Microsoft Graph, “onPremisesExtensionAttributes resource type,” https://learn.microsoft.com/en-us/graph/api/resources/onpremisesextensionattributes (accessed Oct 19, 2026).↩︎
Microsoft Learn, “Manage rules for dynamic membership groups in Microsoft Entra ID” (supported properties; extension attributes and custom extension properties; security consideration on attribute write permissions), https://learn.microsoft.com/en-us/entra/identity/users/groups-dynamic-membership (accessed Oct 19, 2026).↩︎
Microsoft Learn, “Manage rules for dynamic membership groups in Microsoft Entra ID” (supported properties; extension attributes and custom extension properties; security consideration on attribute write permissions), https://learn.microsoft.com/en-us/entra/identity/users/groups-dynamic-membership (accessed Oct 19, 2026).↩︎