Most engineers think…
Most people picture Okta as a login box that sits in front of apps. That framing is too narrow.
Okta Universal Directory is the identity spine of the whole platform. It consolidates user profiles from Active Directory, LDAP, HR systems and SCIM sources into one object per user, applies attribute transformations via Okta Expression Language, and then pushes the right profile to each downstream app. Understanding UD — profiles, mastering, mappings, agents and push — is what lets you design an IAM deployment that stays consistent at scale instead of drifting into a mess of conflicting values.
① User profiles & the attribute schema
Every user, group and device in Okta lives in the Universal Directory (UD) as a single profile object. That object is built on a base schema of 31 standard attributes following the SCIM Core Schema (RFC 7643). You extend the base with custom attributes — any data type your org needs — through the Profile Editor in the Admin Console or via the Schema API.
The Profile Editor is your single governance window: it shows every attribute for every integration in one place, lets you set data types, mark attributes as required or unique, and configure whether they are read-only or editable by the user. Every app integration you add gets its own app user schema that sits alongside the Okta user schema; attribute mappings bridge the two.
The interview point: one user, one UD profile, regardless of how many directories feed it. AD, LDAP, HR, SCIM — they all contribute to the same object.
How many standard attributes does the Okta Universal Directory base schema include?
② Profile sourcing & mastering
Profile sourcing is the mechanism that designates one upstream directory as the authority for a user's profile attributes. When AD is the profile source, Okta cannot let you edit that user's AD-mastered fields in the Admin Console — changes must happen in AD and then sync to Okta. This prevents drift between your authoritative directory and Okta.
How mastering works in practice
An AD-mastered user has their core attributes (name, email, department) locked to whatever AD says. If you also have an HR system, you can configure attribute-level mastering: AD masters the technical attributes (samAccountName, OU), while the HR app masters HR-specific fields (costCentre, jobTitle), and Okta itself masters any remaining attributes. Priority rules decide the winner when two sources send conflicting values for the same field.
The rule of thumb: one authority per attribute, clearly documented. Ambiguous mastering is the number-one cause of profile inconsistency in real Okta deployments.
The single identity store in Okta — one profile object per user consolidating every upstream source (AD, LDAP, HR, SCIM) with a base schema of 31 SCIM attributes plus custom extensions.
The rule that one designated source owns and controls a user's attributes. AD-mastered users cannot have their AD-owned fields edited directly in Okta — the source is the authority.
A SpEL-based scripting layer inside attribute mappings. Lets you strip, concatenate, reformat or branch on attribute values before they land in UD or are pushed to an app.
Okta's mechanism for writing UD attribute changes downstream to an integrated app — automatically triggered when a mapped attribute changes, using per-attribute push rules.
Before connecting any source to UD, write a one-page attribute authority table: attribute name, master source, whether it is pushed downstream, and whether the app can also edit it. Skipping this step is how orgs end up with nightly title-reset bugs and conflicting department names in different apps.
When Active Directory is set as the profile source for a user, what happens to that user's AD-mastered fields in Okta?
③ Okta Expression Language & AD / LDAP agents
Okta Expression Language (OEL) is a subset of Spring Expression Language (SpEL) you embed inside attribute mappings. Instead of mapping a raw field one-to-one, you write an expression that transforms it: strip a domain from an email, concatenate first and last name, reformat a date, or branch on a condition. Example: String.substringBefore(user.email, '@') as a login attribute. OEL runs at import time (when a source value lands in UD) and at push time (when UD sends a value to an app).
AD Agent and LDAP Agent
On-prem directories reach Okta through lightweight agents. The Okta AD Agent installs on a Windows server in your AD domain, opens an outbound HTTPS connection to Okta (no firewall hole inbound), and handles import, provisioning and optional password sync. You deploy multiple agents per domain for HA. The LDAP Agent does the same for any RFC 4511-compliant LDAP directory (OpenLDAP, Sun DSEE, etc.) and can also expose Okta as an LDAP endpoint so legacy apps can authenticate against UD without being modified.
Both the AD Agent and the LDAP Agent open outbound HTTPS connections to Okta — Okta never initiates inbound connections to your network. If a firewall team asks you to open an inbound port for 'the Okta connector', that is a misconception. Deploy the agent on an internal server, allow outbound 443, and the handshake happens automatically.
▶ Watch an AD attribute update flow all the way to Salesforce
An employee's department changes in Active Directory. See how that flows through the AD Agent, UD, an OEL mapping and profile push to Salesforce. Press Play, then Break it.
You need the Okta username to be the part of the email address before the '@'. Which OEL expression achieves this?
④ Profile push — writing changes downstream
Profile push is the downstream half of the data flow. After UD has the authoritative, possibly transformed profile, it needs to write the right subset of attributes to each integrated app. Profile push does this automatically whenever a mapped UD attribute changes — username, department, title, or a custom field — without manual intervention.
You control what gets pushed through attribute-level push rules: some attributes sync immediately on change; others are excluded. Selective Attribute Push lets you push specific attributes independently — useful when you want to update an app's department field but not override a username the app manages itself.
Push groups vs push attributes
Okta also supports Push Groups, which replicate Okta groups into an app's own group model. Combined with profile push and OEL expressions, this gives you a full write-back loop: source directory masters the data, UD consolidates and transforms it, and push propagates the right version to every downstream system. The failure mode to avoid: pushing an attribute that the app also allows users to edit — the app's own value gets overwritten on the next push cycle.
Priya at a Pune fintech faces this
After a new HR system was connected to Okta, users' job titles in Salesforce started reverting to stale values every night.
Both the HR app and Okta's AD agent are sending jobTitle to UD, and profile push is set to immediately overwrite the Salesforce value with whatever UD holds — but UD itself is receiving conflicting masters.
Check Profile Editor ▸ Mappings for jobTitle: two sources — AD and the HR app — are both mapped to jobTitle with no mastering priority set. The last sync wins, creating a race condition.
Admin Console ▸ Directory ▸ Profile Sources ▸ jobTitle prioritySet the HR app as the sole master for jobTitle (higher priority than AD). Remove the AD-to-jobTitle mapping, or set it to 'do not override'. Re-run the HR import. Profile push will now carry the HR-authoritative title to Salesforce.
Change jobTitle in the HR system, confirm UD shows the new value, confirm Salesforce reflects it within the push interval — and that a stale AD value no longer overwrites it.
Before enabling profile push on a production app, run a test: change a mapped attribute in UD and confirm the app receives the new value within the expected push interval. Also confirm that any app-side user edits to the same attribute are correctly overwritten (or excluded, if that is your intent). Never assume push is working until you have watched it end-to-end.
An app lets users update their own job title, but profile push is also set to push the jobTitle attribute. What will happen on the next push cycle?
🤖 Ask the AI Tutor
Tap any question — instant, scoped to this lesson. No login, no waiting.
Pre-curated from vendor docs + community Q&A, scoped to this lesson. For a live prod issue, paste your export into chat.techclick.in.
📝 Wrap-up assessment — six more
You've answered 4 inline. Six left. 70% (7 of 10) marks the lesson complete on your profile. Tap Submit all answers at the end.
🧠 In your own words
Type one line: what is the difference between profile sourcing and profile push in Okta? Then compare with the expert version.
🗣 Teach a friend
Best way to lock it in — explain it in one line to a teammate. Tap to generate a paste-ready summary.
📖 Glossary
- Universal Directory (UD)
- Okta's central identity store — one profile object per user consolidating attributes from all upstream sources with a 31-attribute SCIM base schema.
- Profile Editor
- The Admin Console tool for viewing and extending the Okta user schema and per-app user schemas, including adding custom attributes and configuring their data types.
- Profile Sourcing
- The configuration that designates one upstream directory as the authoritative owner of a user's profile attributes; Okta locks those fields to prevent direct edits.
- Profile Mastering
- The state of a user attribute being owned by a specific source (e.g. AD-mastered); the source controls all updates and Okta reflects them after sync.
- Okta Expression Language (OEL)
- A SpEL-based scripting language used in attribute mappings to transform, combine or reformat attribute values before they land in UD or are pushed to an app.
- AD Agent
- A Windows-based lightweight agent installed in an AD domain that connects to Okta over outbound HTTPS to sync users, groups and optionally passwords.
- LDAP Agent
- An agent that bridges any RFC 4511 LDAP directory to Okta UD and can also expose UD as an LDAP endpoint for legacy app authentication.
- Profile Push
- Okta's downstream sync mechanism that writes UD attribute changes to integrated apps automatically when a mapped attribute value changes.
- Selective Attribute Push
- A profile push setting that lets you push specific attributes to an app independently rather than syncing the full profile on every change.
📚 Sources
- Okta Developer — Universal Directory concepts: user profiles, base schema and custom attributes. developer.okta.com/docs/concepts/universal-directory/
- Okta Help — Make Active Directory the Profile Source (Identity Engine). help.okta.com/oie/en-us/content/topics/directory/directory_ad_enable_profile_source.htm
- Okta Developer — Okta Expression Language overview guide. developer.okta.com/docs/reference/okta-expression-language/
- Okta Help — Modify attributes with expressions (attribute mapping transformations). help.okta.com/oie/en-us/content/topics/users-groups-profiles/usgp-attribute-mappings-expressions.htm
- Okta Help — Configure Active Directory import and account settings (AD Agent). help.okta.com/en-us/content/topics/directory/ad-agent-configure-import.htm
- Okta Help — Set up and manage the LDAP Interface (LDAP Agent and LDAP endpoint). help.okta.com/en-us/content/topics/directory/ldap-interface-main.htm
What's next?
Understand the Universal Directory? Next, go deep on Okta Lifecycle Management — how Joiner, Mover, Leaver workflows use UD profiles to automate provisioning and deprovisioning across every integrated app.