Multiple AD Domain and Forest Integration in Okta

Multiple AD Domain and Forest Integration in Okta

A plain-English guide to connecting more than one Active Directory domain or forest to Okta: how the agent works, how to lay out instances, how to keep usernames unique and accounts linked, how sign-in is routed, and how to design, secure, monitor, and change a multi-directory setup without locking anyone out.

Few companies of any age have exactly one Active Directory. One was built for the head office. Another arrived with an acquisition. A third was created for a region that wanted its own administrators. Some were set up as separate forests for security reasons, and a few belong to partners or business units that never fully merged. Each of these directories holds real people with real accounts, passwords, and group memberships, and every one of them needs to work with a modern cloud sign-in system.

Okta can connect to Active Directory and treat it as a source of people and a place to check passwords. Connecting one domain is straightforward. Connecting many raises new questions: how do the connections work, how many agents are needed, what happens when two people share a name in different domains, how does Okta know which domain to ask when someone signs in, and what happens when one person has accounts in two forests? This guide explains it all from zero. You will learn the Active Directory words you need, how the Okta agent works, how to lay out the integration, how usernames and matching work, how sign-in is routed, and how to secure, monitor, and change it safely. The companies and numbers in the examples are invented for teaching.

1Why Companies End Up with Many Directories

Before learning any settings, it helps to see how organizations collect directories, and why combining them is rarely as simple as merging them into one.

How the sprawl happens

  • Acquisitions. A bought company arrives with its own directory, its own naming habits, and its own administrators. Merging directories can take years.
  • Regional autonomy. A country office may run its own domain for legal, language, or control reasons.
  • Security boundaries. Some organizations deliberately use separate forests to contain the damage of a breach, for example one forest for administrators and another for ordinary users.
  • Legacy systems. An old application needs an old domain that nobody dares to retire.
  • Partners and joint ventures. A shared project may have its own directory that neither side fully owns.
  • History. A directory designed twenty years ago for a company that has since changed shape.

What the business wants

From the user’s side, none of this matters. A person wants to sign in once, reach their applications, and not be told that they belong to the wrong domain. From the security team’s side, the goal is a single, consistent set of rules: one place to enforce strong sign-in, one place to remove access when someone leaves, one place to see who has what. Okta sits in the middle as a single front door for many directories.

Everyday Analogy

Imagine a large conference center that rents halls from several different owners. Each hall keeps its own guest list. The center wants one reception desk that can look at the right list, whichever hall the visitor belongs to. Okta is the reception desk, and each directory is a hall’s guest list.

Many
Directories with their own people, rules, and owners
One
Front door where users sign in and policies apply
Links
Agents, matching rules, and mappings that tie them together
i
Tip

Before connecting anything, draw your directories on one page: each forest, its domains, how many people, who runs it, and which trusts exist between them. Most integration surprises come from directories nobody remembered to draw.

2Active Directory Words in Plain English

A handful of terms appear in every conversation about directories. Learning them once makes the rest of this guide easy.

The vocabulary

TermMeaningEveryday picture
DomainA group of accounts and computers managed together, with a shared database of peopleOne company’s staff list
Domain controllerA server that holds a copy of the domain’s directory and checks passwordsA records office that can answer who is who
ForestThe top-level container: one or more domains that share a common structure and trust each otherA corporate group of related companies
Tree and child domainDomains arranged under a parent, such as a regional domain below a global oneA regional office under head office
TrustAn agreement that lets one domain’s accounts be recognized by anotherTwo countries recognizing each other’s passports
Global catalogA partial index of every object in a forest, for forest-wide searchesA combined phone book
Organizational unit (OU)A folder inside a domain used to organize and delegateA department folder
User principal name (UPN)A sign-in name that looks like an email addressAn address on the company letterhead
sAMAccountNameThe older short sign-in name, unique only inside its domainA staff badge number valid in one office
objectGUIDA permanent unique identifier for each object, stable even when names changeA national insurance number
SID and SID historyThe security identifier used for permissions, and old ones kept after a moveA passport number and the numbers it replaced

The two facts that matter most for Okta

First, names are only unique within a scope. A short sign-in name such as “jsmith” may exist in two different domains for two different people. A UPN is meant to be unique across a forest, but not across forests. So when you combine several directories, collisions are a real possibility, not a theoretical one.

Second, the permanent identifier is the object GUID, not the name. Names change when people marry, move teams, or are renamed during cleanups. The GUID stays. Good integrations key their links on stable identifiers, so a rename does not look like a brand-new person.

flowchart TD
    FA["Forest A"] --> DA1["Domain: corp.example"]
    FA --> DA2["Child domain: emea.corp.example"]
    FB["Forest B from an acquisition"] --> DB1["Domain: bluebird.example"]
    DA1 -.->|"Trust"| DB1
    DA1 --> UA["Users, groups, OUs"]
    DA2 --> UB["Users, groups, OUs"]
    DB1 --> UC["Users, groups, OUs"]
    
Fig 2.1 — Two forests, one with a child domain, connected by a trust: a typical result of an acquisition

The picture shows a company that has grown by acquisition. Forest A has a parent domain and a regional child. Forest B is the acquired company’s own forest, linked to A by a trust. Each domain has its own users and groups. Okta must connect to all three domains to see all the people.

Everyday Analogy

Think of countries, regions, and passports. A forest is a country, a domain is a region, and a trust is a treaty that lets citizens of one visit the other. A person’s permanent national number never changes, even if their surname does.

3How Okta Connects: The Agent

Okta lives in the cloud and your directories live inside your network. A small program called the agent links the two.

What the agent is

The Okta Active Directory agent is a small service installed on a Windows server that is a member of the domain it will serve. The agent opens an outbound, encrypted connection to Okta over the standard secure web port, and keeps it open. Because the connection is outbound only, you do not need to open inbound holes in your firewall to the directory. Okta sends requests down the connection, such as “import these users” or “check this password”, and the agent carries them out against a domain controller and returns the answer.

What the agent does

  • Imports. Reads users and groups from the domain and sends them to Okta, on a schedule or on demand.
  • Delegated authentication. Checks a person’s password against Active Directory when they sign in to Okta, so passwords stay in the directory.
  • Provisioning back. Creates or updates users and groups in Active Directory when Okta is set up to write to it.
  • Password operations. Handles password resets, changes, and expiry information according to your settings.
  • Reporting. Sends status and health information so you can see in Okta whether it is working.
sequenceDiagram
    participant OK as Okta in the cloud
    participant AG as Okta AD agent
    participant DC as Domain controller
    AG->>OK: Open outbound secure connection and keep it alive
    OK->>AG: Request an import of users and groups
    AG->>DC: Query the directory
    DC-->>AG: Users and groups
    AG-->>OK: Send results
    OK->>AG: Check this user's password
    AG->>DC: Validate credentials
    DC-->>AG: Valid or not
    AG-->>OK: Result of the check
    
Fig 3.1 — The agent holds an outbound connection to Okta and performs directory work on request

The sequence shows why no inbound firewall rule is needed. The agent dials out and Okta replies on the same connection. Passwords are checked in the domain controller, not copied to Okta, when delegated authentication is used. That keeps the directory as the single source of truth for credentials.

i
Good to Know

Okta changes agent versions, features, system requirements, and menu names over time. This guide describes lasting ideas and uses cautious wording about exact screens. Always confirm requirements and steps in the current Okta documentation before installing or changing anything.

Everyday Analogy

The agent is a courier who works inside a secure building. The office headquarters never sends people through the front door. The courier phones out, gets the list of errands, goes to the records room, and phones back the answers.

4Laying Out the Integration: Instances per Domain and Forest

The first big design decision is how many Active Directory connections to create in Okta, and what each one covers.

The idea of an instance

In Okta, each connected directory appears as an Active Directory instance, a configuration object with its own agents, import settings, mappings, and username rules. An instance corresponds to a forest or domain that Okta can reach through its agents. Different directories that cannot be reached by the same agents, or that need different rules, become different instances. Exactly how Okta groups domains of one forest into an instance depends on the version and your setup, so confirm the current behavior in the documentation.

Common layouts

LayoutWhen it fitsStrengthsWeaknesses
One instance covering a forest with child domainsSingle forest, domains under common control, trusts in placeFewer connections to manage, single set of rulesLess independence for each domain, rules must fit all
One instance per domainDomains run by different teams or with different rulesIndependent settings, clearer ownership and troubleshootingMore agents, more mappings, more things to keep consistent
One instance per forestSeparate forests from acquisitions or security boundariesMatches the real boundary, agents need only reach their own forestMust handle duplicate names and linked accounts across instances
MixedLarge estates with both patternsFits realityNeeds careful documentation

What belongs in the choice

  • Network reach. An agent must be able to reach domain controllers for the directories it serves. Forests without network connectivity need their own agents.
  • Ownership. Teams that own a domain often want control over its import scope and mappings.
  • Rules. Different username formats, import filters, or password policies point to different instances.
  • Scale. Very large directories may be better split for import speed and manageability.
  • Future change. If a domain will be retired within a year, give it a separate instance so removal is easy.
flowchart LR
    OKT["Okta organization"] --> I1["AD instance: Forest A including child domains"]
    OKT --> I2["AD instance: Forest B acquired company"]
    OKT --> I3["AD instance: Partner forest"]
    I1 --> A1["Agents in Forest A"]
    I2 --> A2["Agents in Forest B"]
    I3 --> A3["Agents in the partner forest"]
    A1 --> D1["Domain controllers A"]
    A2 --> D2["Domain controllers B"]
    A3 --> D3["Domain controllers partner"]
    
Fig 4.1 — Each forest becomes an instance with its own agents and domain controllers behind it

The figure shows a clean pattern: one instance per forest, each with its own agents, and each agent talking only to the domain controllers of its own forest. The layout follows the real network and ownership boundaries, which makes troubleshooting much simpler.

i
Tip

Name each instance after the directory it represents, in a way a new colleague would understand, for example “Forest-Corp” or “Forest-Bluebird”. Clear names appear in every log and report, and save time in every incident.

Everyday Analogy

A national postal service has separate sorting offices for each region, each with its own staff and trucks. A letter for a region goes to its own sorting office. Each office is small enough to manage and large enough to be efficient.

5Agents, High Availability, and Sites

One agent is a single point of failure. A good design uses several, placed with care.

Why more than one agent

If the only agent for a domain stops, Okta can no longer import users or check passwords for that domain, and people stop being able to sign in. Servers get patched, restarted, and sometimes fail. Running at least two agents per directory, on separate servers, means one can be down without anyone noticing. Okta spreads work across the agents that are connected and healthy.

Placement guidelines

  • Separate servers. Do not put two agents on the same machine. A single server failure would take both down.
  • Separate locations. Place agents in different sites or data centers where possible, so a site outage does not remove all agents.
  • Close to domain controllers. Agents should be near healthy domain controllers for speed and reliability.
  • Dedicated servers. Avoid sharing the agent server with unrelated heavy applications.
  • Properly sized. Large estates and heavy sign-in loads need more capacity. Follow current Okta sizing guidance.
  • Hardened. The server holds a service account with directory read power, so treat it as a sensitive system.
flowchart TD
    OKT["Okta"] --> AG1["Agent 1 in data center one"]
    OKT --> AG2["Agent 2 in data center two"]
    AG1 --> DC1["Domain controller in data center one"]
    AG1 -.->|"Fallback"| DC2["Domain controller in data center two"]
    AG2 --> DC2
    AG2 -.->|"Fallback"| DC1
    
Fig 5.1 — Two agents in two locations, each preferring a nearby domain controller and able to use the other as a fallback

The picture shows two layers of redundancy. If one agent or its server fails, the other keeps serving. If one domain controller fails, each agent can use another. Redundancy at only one layer is not enough.

Agent maintenance

Agents receive updates from Okta, and many installations update automatically. Plan for this: updates may restart the service briefly. With two or more agents, Okta can usually keep working during an update on one of them. Stagger server patching so that both agents are never restarted at the same time.

!
Watch Out

A common mistake is installing two agents, then patching both servers in the same maintenance window. When both restart together, sign-ins fail for that domain for several minutes. Stagger the patching and check agent health between steps.

Everyday Analogy

A hospital has two emergency generators in different buildings, each able to power the vital areas. The maintenance team never tests both at once, because that would remove the safety net precisely when it is being checked.

6Service Accounts and Least Privilege

The agent acts with a directory account. How much power that account has is one of the most important security choices in the whole design.

What the account needs

The agent runs under a domain account that must be able to read the users and groups you want to import. If you also want Okta to create or update accounts, reset passwords, or manage groups in Active Directory, the account needs matching write permissions, but only for the parts of the directory involved. Directory permissions are normally granted through delegation on the relevant organizational units, so the account can touch only those units and nothing else.

Least-privilege rules

NeedPermission ideaAvoid
Import users and groups onlyRead access on the chosen OUsMaking the account a domain administrator
Reset or change passwordsReset password and change password rights on user OUs onlyGranting broad control over all objects
Create or update usersCreate and write rights on one dedicated OUWrite access over privileged accounts
Manage pushed groupsWrite rights on a dedicated group OURights over administrative groups
Different domainsA separate account in each domain, each limited to its own domainOne powerful account trusted across forests

Protecting the account

  • Strong, unique password. Stored securely, with a rotation plan.
  • Restricted logon. The account should only sign in to the agent servers, not to workstations or other servers.
  • Monitoring. Alerts on unusual use of the account.
  • No interactive use. People should not sign in as the service account.
  • Documented ownership. A named team owns the account, its password rotation, and its permissions.
flowchart LR
    AG["Agent service"] --> SA["Service account in the domain"]
    SA --> OU1["Delegated: read user OUs"]
    SA --> OU2["Delegated: reset passwords on user OUs"]
    SA -.->|"No rights"| ADM["Administrator groups and privileged accounts"]
    
Fig 6.1 — The agent’s account has narrow, delegated rights on specific OUs and none over privileged accounts

The picture shows the aim: enough power to do the job, and none over the crown jewels. If an attacker took over the agent server, the damage would be limited to what the account is allowed to do. A domain administrator service account would hand the attacker the whole directory.

!
Watch Out

Never reuse one service account across forests or give it rights over administrative accounts for convenience. Password resets for privileged accounts should be excluded from the integration entirely, so that the agent cannot be used to take over an administrator.

Everyday Analogy

A courier gets a key that opens the mail room and nothing else. Giving the courier the master key for the whole building would be easier on the first day and a disaster on the day the key is lost.

7Importing Users: Scope, Filters, and Schedules

Importing is how Okta learns who exists. Choosing what to import, and how often, shapes everything that follows.

Choosing the scope

You do not have to import the whole directory. You choose which organizational units to include, and often can apply filters to select only certain users. A good scope includes the people who need access to cloud applications and excludes service accounts, test accounts, old disabled accounts, and administrative accounts that should never sign in through Okta. A narrow, deliberate scope is safer and faster than “import everything”.

Full and incremental imports

Import typeWhat it doesUse for
Full importReads everything in scope and compares with OktaFirst load, after major changes, and as a regular safety net
Incremental importReads only what changed since the last runFrequent updates, keeping Okta nearly current
On-demand importTriggered by an administratorTesting and urgent fixes
Scheduled importRuns on a set timetableNormal operation

What happens on import

For each directory user, Okta decides whether to create a new Okta user, update an existing one, or take no action. It does this using matching rules, covered in a later chapter. Users who disappear from the scope, or become disabled in the directory, can trigger deactivation in Okta according to your settings. Because that action removes access, test it carefully before turning it on.

flowchart TD
    DIR["Directory user in scope"] --> MT{"Matching Okta user found?"}
    MT -- "No" --> CR["Create new Okta user"]
    MT -- "Yes, one match" --> UP["Link and update attributes"]
    MT -- "Yes, several matches" --> CF["Flag as conflict for review"]
    CR --> POL["Apply mappings and group rules"]
    UP --> POL
    
Fig 7.1 — Each imported user is matched to an Okta user, which is created, updated, or flagged if the match is unclear

The picture shows three outcomes. New people are created, known people are linked and updated, and ambiguous cases are held back for a human decision. The ambiguous case matters most in multi-directory setups, where the same person may appear in several places.

i
Tip

For a first import into a new instance, run it with automatic activation and deactivation turned off. Review the list of users Okta plans to create or link, correct the scope, and only then turn on lifecycle actions.

Everyday Analogy

A librarian cataloguing a donated collection decides which shelves to include, checks each book against the existing catalogue, and sets aside the doubtful ones for the head librarian. The catalogue stays tidy because the doubtful cases are handled by a person.

8Groups: Importing and Pushing

Groups carry access decisions. In a multi-directory estate, group handling needs extra care to avoid name clashes and loops.

Two directions

Okta can import groups from Active Directory, so that existing directory groups become Okta groups that you can use to assign applications. It can also push groups from Okta to Active Directory, creating or updating directory groups whose membership follows Okta. Import suits organizations whose group structure already lives in the directory. Push suits organizations that want Okta to be the place where access is managed, with directory groups acting as a mirror for older applications.

Multi-directory pitfalls

  • Name collisions. Two domains may each have a group called “Finance”. In Okta they must be distinguishable. Use naming conventions or prefixes that include the domain or forest.
  • Loops. Importing a group from a directory and pushing the same group back can create confusing circular behavior. Decide the direction for each group and keep it.
  • Nested groups. Active Directory allows groups inside groups. Okta’s handling of nested membership has limits, so check how your nested structures will be read.
  • Cross-domain membership. Users from one domain can belong to groups in another within a forest or across trusts. Test these cases specifically.
  • Large groups. Very large groups slow imports and pushes. Prefer smaller, purpose-built groups.
  • Privileged groups. Never push or import membership of administrative groups through the integration, unless you have a specific, controlled reason.
ApproachDirectionBest forWatch for
Directory is master for groupsImport into OktaExisting group structure, directory teams in chargeDuplicate names across directories
Okta is master for groupsPush to directoryCentral access management, older applications still reading directory groupsService account write rights and naming collisions
Hybrid by purposeSome imported, some pushedGradual migrationClarity on which group is which
Rule-based groups in OktaCreated from user attributesDynamic access from HR dataKeep inputs reliable
flowchart LR
    GA["Forest A group: Finance"] -->|"Import with prefix"| OA["Okta group: A-Finance"]
    GB["Forest B group: Finance"] -->|"Import with prefix"| OB["Okta group: B-Finance"]
    OA --> APP["Application assignment"]
    OB --> APP
    OR["Okta rule group: All-Finance-Users"] -->|"Push"| GPUSH["Directory mirror group for legacy apps"]
    
Fig 8.1 — Prefixes keep same-named groups apart, and pushed groups mirror Okta decisions for older applications

The diagram shows how to avoid a typical clash. Each forest’s “Finance” group is imported with a prefix, so Okta holds two clearly different groups. A separate rule-based group, owned by Okta, is pushed to the directory when a legacy application still reads groups there.

!
Watch Out

Group push gives Okta write power in your directory. Limit it to a dedicated OU, keep the pushed groups separate from any group that grants administrative rights, and review who can change push mappings in Okta.

Everyday Analogy

Two schools may both have a “Year 7” class. A combined timetable needs labels such as “North Year 7” and “South Year 7”, or students will turn up in the wrong room.

9Authentication: Delegated Sign-In and Passwords

When a person types a password, someone must check it. With Active Directory, that someone is usually the directory itself.

Delegated authentication

In delegated authentication, Okta does not keep the person’s password. When someone signs in, Okta passes the password through the secure agent connection to a domain controller of the correct domain, which says whether it is right. Okta then applies its own rules, such as extra factors, and creates a session. The password remains stored only in Active Directory. The advantage is that existing directory password rules, lockout policies, and expiry rules keep working. The cost is that Okta’s sign-in depends on the agent and domain controller being reachable.

Other approaches

ApproachHow it worksStrengthsWeaknesses
Delegated authenticationPassword checked live in Active DirectorySingle place for passwords, directory policies still applySign-in depends on agents and domain controllers
Password synchronizationPassword changes in the directory are copied to Okta in a protected formOkta can authenticate even when the directory is unreachableNeeds extra components, a second place to hold password data
Passwordless or strong factorsPeople sign in with device-bound methods and the directory password is used lessFewer passwords to stealNeeds enrollment and support for legacy apps
Federation from another identity systemAnother provider vouches for the personWorks where Okta cannot reach the directoryMore moving parts

Password change and reset

When a person changes or resets their password in Okta, the agent can write the new password to Active Directory, if the service account has the right to do so. Directory password rules, such as length and history, still apply, and failures are reported back to the person. In multi-directory setups, make sure each domain’s agent account has reset rights on its own users, and nothing beyond.

sequenceDiagram
    participant U as Person
    participant OK as Okta
    participant AG as Agent for the person's domain
    participant DC as Domain controller
    U->>OK: Username and password
    OK->>OK: Find the user and the directory they belong to
    OK->>AG: Check this password
    AG->>DC: Validate credentials
    DC-->>AG: Valid
    AG-->>OK: Valid
    OK->>U: Ask for additional factor if policy requires
    U->>OK: Approve
    OK-->>U: Session created
    
Fig 9.1 — Okta finds the person’s directory, asks that domain’s agent to verify the password, then applies its own factor rules

The sequence shows the routing step: Okta must know which directory to ask. In a multi-directory estate that depends on how users are linked to instances, which later chapters explain. The agent for that user’s domain does the checking, not agents of other domains.

!
Watch Out

With delegated authentication, a domain’s lockout policy counts failed attempts made through Okta too. A burst of automated guessing against Okta can lock real accounts in Active Directory. Combine directory protections with Okta’s own protections against repeated failures, and keep the lockout thresholds sensible.

Everyday Analogy

A hotel front desk asks the central reservation office to confirm a booking by phone each time, rather than keeping its own copy of every booking. The central office stays authoritative, but the desk depends on the phone line.

10Seamless Sign-In from Domain-Joined Computers

People on office computers expect not to type a password at all. Desktop single sign-on can do that, but it needs care across many domains.

The idea of desktop single sign-on

When a computer is joined to a domain and a person is already signed in to Windows, their computer holds proof of that sign-in. Desktop single sign-on, using integrated Windows authentication, lets the browser present that proof to Okta, so the person is signed in without typing anything. It relies on a small web component installed in each domain, and on the browser being willing to send the proof to Okta’s address, which an administrator must allow through browser or group policy settings.

Complications with many domains

  • One component per domain. Each domain or forest needs its own web component or equivalent, so that proofs from that domain can be checked.
  • Routing. Okta must decide which component a browser should talk to. This usually depends on the network the person is on, or on the address range they come from.
  • Trusts. Proofs from a domain only work if the checking component can validate them, which depends on trust relationships.
  • Off-network users. People outside the office or on personal devices fall back to normal sign-in with password and factors.
  • Browser settings. The browser must be configured to send proofs to the sign-in address, normally through central policy.
flowchart TD
    BR["Browser on a domain-joined computer"] --> RT{"Which network is the person on?"}
    RT -- "Forest A office network" --> WA["Desktop SSO component for Forest A"]
    RT -- "Forest B office network" --> WB["Desktop SSO component for Forest B"]
    RT -- "Outside any office" --> NORM["Normal sign-in: password and factors"]
    WA --> OKS["Okta session created"]
    WB --> OKS
    NORM --> OKS
    
Fig 10.1 — Network-based routing sends browsers to the right domain’s component, and outsiders use normal sign-in

The picture shows a sensible default: seamless where the person is on a known network, and ordinary sign-in everywhere else. Treat seamless sign-in as a convenience, not as the only path, because laptops travel and networks change.

i
Tip

Seamless sign-in proves only that the computer and Windows session are known. For sensitive applications, keep requiring an additional factor or device check, so that someone walking up to an unlocked office computer cannot reach everything.

Everyday Analogy

An employee wearing a company badge walks through the office gates without showing papers again, because the badge was checked at the front door. That works only inside the building. Outside, the same person shows identification at the visitor desk.

11Usernames and the Identity Key

What Okta calls a person, and how it recognizes them the next time, is the foundation of a multi-directory design.

Two different ideas

A username is what the person types or sees. An identity key is what the system uses to know it is the same person over time. They should not be the same thing. Usernames change when people marry, relocate, or get a new email format. The identity key must stay fixed. In Active Directory, the stable identifier is the object GUID, and Okta uses a directory identifier of this kind to remember which directory account belongs to which Okta user, so a rename in the directory is recognized as a rename, not a new person.

Choosing the Okta username

FormatExample ideaStrengthsRisks
User principal nameName at a company domainLooks like an email, usually unique in a forestDifferent forests may use the same suffix, and UPNs change on renames
Email addressThe person’s primary emailFamiliar to usersEmail can differ from the UPN, and can change
sAMAccountName with a domain suffixShort name at a suffix identifying the domainFamiliar to Windows usersOnly unique inside a domain, so the suffix must make it unique
Custom expressionBuilt from several attributesCan add a domain code to guarantee uniquenessMore complex, must be tested
Employee identifierThe HR number plus a suffixVery stable and uniqueUnfriendly to type

Why this matters more with many directories

In one domain, a username policy only has to be unique inside that domain. With several directories, the username in Okta must be unique across all of them. Two people named “Alex Kim”, one in each forest, might both have the short name “akim”. If both are imported with the same Okta username, the second import fails or collides. A username format that includes a unique element, such as a domain-specific suffix or an employee number, prevents this from the start.

flowchart LR
    A1["Forest A: akim"] --> F["Username format adds forest suffix"]
    B1["Forest B: akim"] --> F
    F --> U1["Okta username: akim at a-suffix"]
    F --> U2["Okta username: akim at b-suffix"]
    U1 --> OK1["Unique"]
    U2 --> OK2["Unique"]
    
Fig 11.1 — A username format that includes a directory-specific suffix keeps same-named people apart

The diagram shows the simplest protection: the suffix is part of the rule, so the two “akim” accounts become two different Okta usernames without any manual work. The suffix does not have to be shown to the person if the sign-in page lets them use their email or another friendly name.

!
Watch Out

Changing the Okta username format after thousands of people are in the system is possible but disruptive. Applications that stored the old username may treat people as new users. Decide the format before the first large import, and test it with the awkward names from every directory.

Everyday Analogy

Two people called Alex Kim at different branches can both be called “Alex” at work. A company directory adds the branch code so the mail does not go to the wrong Alex, while the national insurance number quietly proves who is who underneath.

12Duplicate Names and Collisions Across Domains

Collisions are the most common surprise in multi-directory projects. Finding them early turns a crisis into a to-do list.

Where collisions appear

  • Short sign-in names. The same sAMAccountName in two domains for two different people.
  • User principal names. The same suffix and prefix used in two forests, often after an acquisition where both companies adopted a convention.
  • Email addresses. The same address appears in two directories because of a shared mailbox or a migration in progress.
  • Group names. Identical group names with different meanings.
  • Employee numbers. Two HR systems issuing overlapping numbers.

A pre-import audit

Before connecting a second directory, export the identifying attributes from every directory and look for overlaps. A simple spreadsheet or script can count how many people share each short name, email, UPN, and employee number across directories. The result tells you how much work lies ahead and which username format to choose.

Collision typeTypical causeResolution options
Same short name, different peopleIndependent naming in separate domainsUsername format with a directory suffix or employee number
Same email, different directories, same personPerson has accounts in both forestsLink the accounts to one Okta user using matching
Same email, different peopleReused or shared addresses, data errorCorrect the data at source before import
Same UPN suffix and prefixBoth companies used first.last at the same domain nameChange one suffix or use a custom Okta username
Overlapping employee numbersTwo HR systemsAdd a company code to the key
Same group nameCommon names such as Finance or AdminsPrefix on import or push
flowchart TD
    EX["Export identifying attributes from all directories"] --> CMP["Compare across directories"]
    CMP --> R1["Same person in several directories"]
    CMP --> R2["Different people sharing a name"]
    CMP --> R3["Data errors"]
    R1 --> A1["Plan matching and linking"]
    R2 --> A2["Choose unique username format"]
    R3 --> A3["Fix at source before import"]
    
Fig 12.1 — A pre-import comparison sorts the overlaps into three kinds of work

The picture divides the overlaps by cause. Duplicate records of the same person need linking. Different people sharing a name need unique usernames. Plain mistakes need fixing at the source. Treating them all the same is how projects get tangled.

i
Tip

Share the audit results with the owners of each directory early. They usually know why the overlaps exist and can fix many at source in a day, saving weeks of workarounds.

Everyday Analogy

Before merging two address books, you sort the entries into three piles: the same person in both, different people with the same name, and mistakes. Each pile is handled differently, and the work goes faster once they are separate.

13One Person with Accounts in Several Forests

Mergers, secondments, and special-purpose forests mean many people have more than one directory account. Okta can recognize this, if you tell it how.

Matching and linking

When users are imported, Okta tries to match each directory account to an existing Okta user, using rules you define. A common rule is “same email address” or “same employee number”. When a match is found, Okta links the directory account to that Okta user rather than creating a new one. The result is one Okta person, with one profile, linked to accounts in several directories. When the person signs in, Okta can verify them against the directory account that holds their credentials, and applications see a single identity.

Choosing the matching rule

RuleStrengthsRisks
Employee numberVery reliable if issued by one HR systemBreaks if two systems reuse numbers
Email addressFamiliar and usually presentShared mailboxes, typos, and reused addresses cause false matches
UsernameEasy to seeCommon names collide, so only safe with unique formats
Combination of attributesMore precise, for example email plus employee numberRequires clean data in both directories
Manual confirmationHuman judgment for ambiguous casesSlow, so reserve for the leftovers

What to do about false matches

A wrong match is serious: two different people get merged into one profile, and one may gain the other’s access. For that reason, matching on a single weak attribute is risky. Prefer attributes that cannot be shared, test the rule on a sample first, and review the list of proposed matches before turning on automatic linking.

flowchart LR
    AA["Account in Forest A: sam.lee"] --> M{"Matching rule: employee number equal?"}
    BB["Account in Forest B: slee"] --> M
    M -- "Yes" --> ONE["One Okta user linked to both accounts"]
    M -- "No" --> TWO["Two separate Okta users"]
    ONE --> SIGN["Sign-in verified against the directory holding the credentials"]
    
Fig 13.1 — When the matching rule says two directory accounts are the same person, Okta links them to a single user

The picture shows the payoff. The person has two directory accounts but one Okta identity, so a single deactivation in Okta, or a single policy, applies to both. The cost is that the matching rule is now a security decision: a wrong rule can merge strangers.

!
Watch Out

Before linking, check which account is the master for each attribute and which is used for password checks. If a person is linked to two accounts with different passwords and different lockout states, they may find sign-in confusing. Document which directory is authoritative for which purpose.

Everyday Analogy

A bank recognizes that a customer with a current account at one branch and a savings account at another is the same person, and shows both under one customer number. It matches on solid details, not just a common first name.

14Profile Mapping and Which Directory Wins

When one person’s data comes from several directories, you must decide which source supplies each attribute.

Mapping per instance

Each Active Directory instance has its own mapping that says which directory attribute fills which Okta attribute. Because directories differ, each mapping may differ too. One forest stores the department in one field and another stores it in a different field. One has titles in capital letters and another in normal case. Per-instance mappings let you translate each directory into the same standard shape in Okta.

Priority between sources

When two sources can set the same Okta attribute, one must win. Okta lets you rank the profile sources, and in many setups also choose the source of individual attributes. Without a ranking, the last import wins, and values can flip back and forth between runs. A good rule is to let the business system own business facts: HR owns title, department, and manager. Directories own technical facts: the directory name, the group membership, and the password state.

AttributeBest ownerReason
Legal name, title, department, managerHR systemHR owns the official record
Sign-in name for each directoryThat directoryOnly it knows the technical name
Email addressThe mail system or primary directoryNeeds one authoritative value
Group membershipsEach directory for its own groupsGroups are scoped to their directory
Account enabled or disabledEach directory for its own accountDrives lifecycle for that account
Phone and office locationHR or the personBusiness and personal data
flowchart LR
    HR["HR source: title, department, manager"] --> UD["Okta profile"]
    DA["Forest A mapping: name, group membership"] --> UD
    DB["Forest B mapping: name, group membership"] --> UD
    UD --> PR{"Source priority per attribute"}
    PR --> OUT["One value for each attribute"]
    
Fig 14.1 — Several sources feed one profile, and a priority rule chooses one winner for each attribute

The picture reminds us that the Okta profile is the middle ground. Each source translates into the standard shape, and priority picks one value per attribute. A short table of attribute owners keeps everyone on the same page.

i
Tip

If a value mysteriously flips, check the System Log for which source changed the attribute and when. Flip-flopping almost always means two sources with the same priority are both writing it.

Everyday Analogy

A family file takes medical facts from the doctor and school facts from the school. If both tried to update the address, the file would hold whichever arrived last. Deciding in advance who owns the address prevents the argument.

15Lifecycle Across Directories: Joiners, Movers, Leavers

People start, change, and leave. In a multi-directory estate, each event must reach every account the person holds.

Joiners

A new hire normally appears first in HR, then in a directory when IT creates the account. Okta imports the account, matches or creates the Okta user, applies mappings and group rules, and assigns applications. Decide which directory a new person belongs to, and write that rule down. A person hired into the acquired company should land in that company’s directory until a planned migration moves them.

Movers

A person who moves department keeps the same accounts, and rule-based groups change automatically. A person who moves to the other company, or to a different forest, is harder. Their old account may be disabled, and a new account created in the other forest. Unless the two are linked by a stable key, Okta sees a leaver and a joiner. Plan these moves so the Okta user continues, with the new directory account linked and the old one retired.

Leavers

When someone leaves, every account must be dealt with. If an Okta user is linked to several directory accounts, deactivating the Okta user removes access to applications, but the directory accounts may remain enabled for other uses. The leaver process should therefore also disable the directory accounts, by the directory team or through Okta’s write-back where configured.

1

HR records the departure

The end date and status change are recorded in the HR system.

2

Okta deactivates or suspends

Okta ends sessions and removes application access based on the HR status.

3

Each directory account is disabled

Directory teams, or an automated flow, disable every linked account.

4

Group and mailbox cleanup

Group memberships are removed and mailboxes handled per policy.

5

Verification

A report compares HR status with enabled accounts in every directory and flags mismatches.

stateDiagram-v2
    [*] --> Active: Linked to directory accounts
    Active --> Suspended: Leave of absence
    Suspended --> Active: Return
    Active --> Deactivated: Termination recorded in HR
    Deactivated --> DirectoriesDisabled: All linked directory accounts disabled
    DirectoriesDisabled --> [*]
    
Fig 15.1 — A leaver passes through deactivation in Okta and disabling of every linked directory account

The state picture shows that Okta deactivation is only one step. A complete leaver process also reaches the directories, because directory accounts can be used for other things, such as signing in to old applications that do not use Okta at all.

!
Watch Out

Orphaned accounts in the second or third forest are a classic gap. The main directory is cleaned up properly, and the acquired company’s forest keeps the account enabled for years. Run a regular comparison of HR status with enabled accounts in every directory.

Everyday Analogy

When an employee leaves, collecting the main building pass is not enough. Parking passes, lab keys, and the warehouse fob all need to come back. A checklist that names every item is the only reliable way to catch them all.

16Use Case: An Acquisition with Two Forests

The most common reason for multiple directories is a purchase. The goal is one front door quickly, long before the directories are merged.

The scenario

Imagine a fictional company, Northwind Foods, with 4,000 employees in a forest called the corporate forest. It acquires Bluebird Kitchens, with 600 employees in a separate forest. A trust exists between the two for file sharing, and some people at Bluebird already have accounts in both forests. Northwind uses Okta for its applications and wants Bluebird staff to use the same applications within weeks, while the long process of merging directories takes a year.

The approach

Step 1

Audit overlaps

Compare names, emails, and employee numbers across forests to find duplicates and same-person pairs.

Step 2

Add an instance

Install two agents inside the Bluebird forest and connect it to Okta as its own instance.

Step 3

Set a username format

Choose a format with a company-specific element so no two people can collide.

Step 4

Map attributes

Translate Bluebird’s department codes and titles to Northwind’s standard shape in the mapping.

Step 5

Match dual-account people

Link the Bluebird staff who already have accounts in the corporate forest to a single Okta user.

Step 6

Pilot, then roll out

Import with lifecycle actions off, review, pilot with one team, and expand.

flowchart LR
    CF["Corporate forest: 4000 users"] --> I1["Instance: Corp"]
    BF["Bluebird forest: 600 users"] --> I2["Instance: Bluebird"]
    I1 --> OKU["Okta users with standard profile"]
    I2 --> OKU
    HR1["Northwind HR"] --> OKU
    HR2["Bluebird HR"] --> OKU
    OKU --> APPS["Shared applications"]
    
Fig 16.1 — Two directory instances and two HR sources feed one Okta profile that drives the shared applications

What the team learned

The first audit found 37 people with accounts in both forests, 11 pairs of different people sharing a short name, and a group named “Finance” in both. Matching on employee number linked 33 of the 37 dual-account people correctly. The remaining four had typing errors in one HR system, which were corrected at source. The colliding short names were solved by the username format. The groups were imported with prefixes. The pilot revealed that Bluebird’s password policy was stricter than Northwind’s, so Bluebird staff kept their existing rules because delegated authentication used each person’s own directory. A year later, when the directories were merged, the stable identity keys let the team move accounts without creating duplicates in Okta.

i
Tip

Treat the integration as a bridge, not the final state. Design it so that a later merge of directories is a matter of moving accounts and relinking, not rebuilding users in Okta. Stable identity keys are what make that possible.

Everyday Analogy

When two companies merge, they share the front reception on day one, long before they share a payroll system. Visitors see one desk, and behind it the two back offices carry on until they can be joined.

17Use Case: One Forest with Many Child Domains

A single forest with regional child domains is simpler than several forests, but it has its own traps.

The scenario

Consider a fictional manufacturer, Ironvale Components, with one forest and a parent domain for the head office plus child domains for Europe, Asia, and the Americas. Each region has its own IT team and its own organizational units. About 9,000 people are spread across the four domains. Trusts between the domains inside a forest are automatic, and a global catalog holds a partial index of every object in the forest.

Design questions

  • One instance or several? A single instance for the forest is simpler. Separate instances give each region independent settings and fault isolation.
  • Where do agents live? At least two per region, close to the regional domain controllers, so sign-ins do not cross slow links.
  • Who owns the import scope? Each region may choose its own OUs, but a central team should approve to keep rules consistent.
  • How are usernames made unique? Short names are unique only within a domain, so use UPNs or a custom format that includes the region.
  • Cross-domain groups. Users from one region may belong to groups in another. Test these cases.
  • Moves between regions. A person transferring between child domains is effectively a new account, so plan for linking.
OptionBenefitCost
One instance for the whole forestSingle place for rules, fewer objectsRegions share one set of import rules and mappings
One instance per regionIndependent control and clear fault boundariesMore agents, more mappings to keep consistent
Central instance for head office plus regional onesFits organizations with a strong head officeMixed design, needs good documentation
flowchart TD
    FOR["Ironvale forest"] --> HQ["Parent domain: head office"]
    FOR --> EU["Child domain: Europe"]
    FOR --> AS["Child domain: Asia"]
    FOR --> AM["Child domain: Americas"]
    EU --> AGEU["Two agents near Europe domain controllers"]
    AS --> AGAS["Two agents near Asia domain controllers"]
    AM --> AGAM["Two agents near Americas domain controllers"]
    HQ --> AGHQ["Two agents at head office"]
    AGEU --> OKT["Okta"]
    AGAS --> OKT
    AGAM --> OKT
    AGHQ --> OKT
    
Fig 17.1 — Regional agents sit next to their own domain controllers and all connect outward to Okta

The picture shows the key principle: put the agents near the people they serve. A password check from Tokyo to a domain controller in Frankfurt works but is slow and fragile. Local agents keep sign-in fast and keep a regional outage from affecting others.

i
Tip

Test sign-in from each region during the pilot, with real latency. A design that looks perfect on a diagram can feel slow on the other side of the world. Measure sign-in time per region and set a target.

Everyday Analogy

A bank with regional branches keeps a records clerk in each branch. Customers do not wait for a call to head office for every query, and a problem in one branch does not close the others.

18Use Case: Account Forest and Resource Forest with Trusts

Some security-minded designs split people from resources. This shapes where Okta looks for accounts, and where it does not.

The pattern

In an account forest and resource forest design, user accounts live in one forest, and servers and applications live in another. The resource forest trusts the account forest, so users from the first can be granted access in the second. The idea is that a breach of the resource side does not reveal user credentials, since those live elsewhere. Another variation is an administrative forest, holding only privileged accounts for managing the other forests, with strict controls.

Impact on Okta

  • Connect the account forest. People are in the account forest, so that is where Okta needs to import and check passwords.
  • The resource forest may need little. If it holds only servers and application groups, Okta may need it only for group push, if at all.
  • Groups across trusts. Access in the resource forest is often controlled by groups there, with account forest users as members. Decide whether Okta pushes or reads those groups.
  • Administrative forests stay out. Privileged accounts should not be imported into Okta or managed by its agent unless there is a strong reason.
  • Trust direction matters. Know which forest trusts which, since it affects which accounts can be recognized where.
ForestContainsRole for Okta
Account forestEmployees’ accountsMain source for import and password checks
Resource forestServers, application groupsPossible target for group push, otherwise not needed
Administrative forestPrivileged accountsGenerally excluded from Okta integration
flowchart LR
    ACC["Account forest: employee accounts"] --> OKT["Okta"]
    RES["Resource forest: servers and application groups"] -.->|"Trusts account forest"| ACC
    OKT -->|"Group push for legacy apps"| RES
    ADM["Administrative forest: privileged accounts"] -.->|"Excluded from Okta"| OKT
    
Fig 18.1 — Okta connects to the account forest, may push groups to the resource forest, and stays away from the administrative forest

The picture shows a clean separation. Okta handles ordinary users, and leaves privileged administration to its own protected forest. Mixing the two would weaken the very separation that the design was built to create.

!
Watch Out

Do not extend the agent’s service account to the administrative forest “for convenience”. A tiered design only works if the tiers stay separate. A service account that spans tiers is a path attackers will look for.

Everyday Analogy

A company keeps its staff records in one secure office and its factory machinery in another building. The factory trusts the records office to say who is staff. A break-in at the factory does not reveal the staff files.

19Use Case: Partner and Disconnected Forests

Not every directory sits comfortably inside your network. Some belong to partners, some have no trust, and some cannot be reached directly at all.

When the agent cannot easily reach the directory

A partner’s forest might sit behind their own firewall, with no network path to your agent servers. Placing your agent inside their network would give your organization’s software a foothold in theirs, which they may not accept. There are several alternatives, each with trade-offs.

OptionHow it worksStrengthsWeaknesses
Agent in the partner’s networkInstall the agent on a partner-owned serverDirect integrationPartner must trust and operate it, agreements needed
Partner uses their own identity providerTheir provider federates with Okta, and their users sign in at homePartner keeps control of credentials and joins and leavesRequires the partner to have a provider that supports federation
Separate Okta accounts for partner staffCreate accounts directly in OktaSimple, no directory neededYou manage their lifecycle and passwords
Scheduled data exchangePartner sends a periodic user listNo direct connectivityStale data, no live password checks

Choosing

The best answer is usually the one that leaves each party responsible for its own people. Federation lets the partner’s directory stay theirs: their staff sign in with their own credentials, and Okta trusts the assertion. Your organization controls what those people may access, and the partner controls whether they still work for them. Where federation is impossible, accounts managed in Okta with an end date and a named sponsor are a workable fallback.

sequenceDiagram
    participant P as Partner employee
    participant PI as Partner identity provider
    participant OK as Okta
    participant APP as Shared application
    P->>OK: Open application sign-in page
    OK->>PI: Redirect for authentication
    PI->>PI: Verify the person in the partner directory
    PI-->>OK: Signed assertion
    OK->>OK: Apply access policy for partner users
    OK-->>APP: Grant session with limited access
    
Fig 19.1 — A partner’s staff authenticate at their own provider and Okta applies your access rules to the result

The sequence shows that federation avoids touching the partner’s directory at all. The partner’s own offboarding process closes access automatically, because their provider stops vouching for the person. This is why federation is usually preferable to copying partner accounts into your systems.

!
Watch Out

Do not create a trust relationship between your corporate forest and a partner forest just to make integration easier. A directory trust can expose far more than the applications you intended. Use federation at the application layer instead.

Everyday Analogy

Visitors from a partner company wear their own company badge, and your reception recognizes it through an agreed process. You do not issue them your badges or hold their files, and when they leave their company, their badge stops working there.

20Migration and Consolidation Between Directories

Many multi-directory estates are temporary. Planning for the day directories merge keeps the Okta side calm.

What consolidation means

Consolidating directories means moving accounts from one domain or forest to another, often using a migration tool, and then retiring the old one. During the move, accounts are copied or moved, passwords may be carried across, and the old identifiers may be kept in a special attribute so permissions continue to work. For Okta, the key problem is that a moved account has a new permanent identifier, which can make it look like a brand-new person.

Keeping the Okta identity

  • Link on a business key. Match moved accounts to existing Okta users using an employee number or another stable business attribute, not just the name.
  • Plan the order. Add the new directory instance, link accounts, test sign-in against the new account, then retire the old instance.
  • Avoid duplicate users. Run imports from the new directory with matching rules enabled before the old account is removed.
  • Keep usernames stable. Where possible, preserve the Okta username so applications do not see a change.
  • Handle password transitions. Decide whether people keep their password or reset at the move.
  • Retire cleanly. Disable accounts and import scopes in the old directory, then remove its instance after a quiet period.
1

Prepare

Audit overlaps, agree the matching key, and plan the account migration waves.

2

Connect the target

Ensure the target directory is connected to Okta with agents and mappings tested.

3

Migrate a wave

The directory team moves a group of accounts to the target.

4

Relink in Okta

Import from the target, match to existing users, verify no duplicates, and test sign-in.

5

Disable the source accounts

Source accounts are disabled but retained for a safety period.

6

Retire the old instance

When all waves are done and the quiet period passes, remove the old instance from Okta.

flowchart LR
    OLD["Old forest account, id one"] -->|"Migration tool moves account"| NEW["New forest account, id two"]
    OKU["Okta user, linked to id one"] --> RM["Match on employee number"]
    NEW --> RM
    RM --> RL["Okta user relinked to id two, same Okta identity"]
    
Fig 20.1 — Matching on a business key lets Okta relink a moved account to the same Okta user

The picture shows the aim: one Okta identity that outlives the move. Applications never see a new person, tokens and assignments carry on, and the only change is the directory account behind the scenes.

i
Tip

Migrate in small waves and verify each one before the next. A pilot wave of twenty friendly users teaches you about matching, passwords, and application behavior at a cost of an afternoon rather than a crisis.

Everyday Analogy

When a family moves house, the post office is told the new address, and the family keeps the same name. The letters keep arriving because the link between the person and the address was updated, not the person’s identity.

21Network, DNS, Firewalls, and Time

Most integration problems turn out to be plumbing. A few network basics prevent most of them.

What the agent needs

  • Outbound access to Okta. The agent must reach Okta’s addresses over the secure web port. Allow the addresses Okta documents, and use names rather than fixed numbers where the documentation allows, since Okta’s addresses change.
  • Access to domain controllers. Agents must reach domain controllers using the standard directory ports. Ports vary by feature, so use Okta’s current list.
  • Working DNS. The agent server must resolve the domain’s names, including the records that identify domain controllers by site.
  • Accurate time. The directory’s authentication depends on clocks agreeing within a small tolerance. Servers must use a reliable time source.
  • Proxy awareness. If the network forces traffic through a web proxy, the agent must be configured to use it, and the proxy must not break the secure connection.
  • Site awareness. The directory’s sites and subnets let agents find nearby domain controllers. Keep them accurate.
SymptomLikely network causeCheck
Agent shows as disconnectedOutbound connection blocked or proxy issueFirewall and proxy rules, service status
Imports slow or failAgent talking to a distant or unhealthy domain controllerSite and subnet configuration, domain controller health
Password checks time outBlocked directory ports or overloaded domain controllerPort reachability, controller load
Intermittent authentication errorsClock driftTime source and skew between servers
Cannot find the domainDNS misconfiguration on the agent serverDNS servers and domain records
Works from one agent but not anotherDifferent firewall rules per siteRules at each location
flowchart TD
    AG["Agent server"] --> DNS["DNS: resolve domain and domain controller names"]
    AG --> TIME["Time source: stay in sync"]
    AG --> DCP["Directory ports to domain controllers"]
    AG --> PRX["Proxy or firewall: outbound secure connection"]
    PRX --> OKT["Okta"]
    
Fig 21.1 — The agent depends on four things working: DNS, time, directory ports, and an outbound connection to Okta

The checklist in the picture explains a surprising share of support cases. When something breaks, start by asking whether DNS resolves, the clock is right, the ports are open, and the outbound path works. Only then look at settings in Okta.

i
Tip

Keep a short network checklist for each agent site, including addresses, ports, DNS servers, time sources, and proxy details, owned by the network team. It speeds up every installation and every incident.

Everyday Analogy

A delivery van can only deliver if the roads are open, the map is correct, the clock matches the customer’s opening hours, and the gate is unlocked. Before blaming the driver, check the plumbing of the journey.

22Security Considerations

The integration connects your cloud sign-in system to the heart of your Windows estate. That makes it a target and a risk worth managing.

The main risks

  • Compromised agent server. An attacker on the server can use the agent’s account and see credentials passing through for delegated authentication.
  • Over-privileged service account. Power beyond what the integration needs expands the damage.
  • Pivoting across forests. A foothold in one forest used to reach another through trust or a shared account.
  • Account takeover by write-back. If Okta can reset passwords in the directory, an attacker with Okta administrator rights might reset a directory user’s password.
  • Mismatched accounts. A wrong matching rule that merges two people.
  • Privileged accounts in scope. Administrators imported into Okta, or reachable through group push.
  • Stale accounts. Disabled people still enabled in a forgotten directory.
Control

Harden agent servers

Dedicated servers, minimal software, patched, restricted administrators, and monitored like sensitive infrastructure.

Control

Narrow delegation

Service accounts limited to specific OUs and rights, with separate accounts per domain or forest.

Control

Exclude privileged accounts

Keep administrators, service accounts, and tier-zero objects out of import scope and group push.

Control

Protect Okta administration

Few Okta administrators, strong sign-in, approval for changes to directory settings, and alerts on edits.

Control

Review matching rules

Test rules on samples, avoid weak attributes, and log every link made.

Control

Regular reconciliation

Compare HR status with enabled accounts in every directory.

flowchart TD
    ATT["Attacker foothold"] --> T1["Agent server"]
    ATT --> T2["Okta administrator account"]
    ATT --> T3["Weak matching rule"]
    T1 --> C1["Dedicated hardened server, narrow service account"]
    T2 --> C2["Strong sign-in, change approval, alerts"]
    T3 --> C3["Strong match keys, sample testing, review"]
    
Fig 22.1 — Each way into the integration has a matching defense

The picture reminds us that the integration crosses a boundary between cloud and directory. Both sides need protection: the servers that hold the agent, and the administrators who control the settings. A weakness in either undermines the other.

!
Watch Out

Treat the agent server as if it were a domain controller in terms of protection, even though it is not. It handles authentication traffic and holds a directory credential. An unpatched, general-purpose server doing double duty is exactly the weak spot attackers search for.

Everyday Analogy

A bridge between two secure compounds is a natural place for checkpoints. If either compound leaves its end of the bridge unguarded, the other is exposed through it.

23Monitoring and Troubleshooting

An integration you cannot see is one you cannot trust. A few signals and a calm routine cover most needs.

What to watch

Agents
Connected count per instance, versions, last contact time
Imports
Duration, errors, and counts of users created, updated, deactivated
Sign-ins
Delegated authentication failures and latency
Changes
Edits to instances, mappings, matching rules, and push settings

Okta’s admin console shows agent status for each instance, and its System Log records imports, authentication events, and configuration changes. Send these to your central monitoring system. On the Windows side, the agent writes to the server’s event logs, and the domain controllers record authentication events. Combining both views makes it much easier to find where something went wrong.

Alerts worth having

  • Fewer than two agents connected for any instance.
  • An agent not heard from for more than a few minutes.
  • An import that fails, runs much longer than usual, or deactivates an unusually high number of users.
  • A spike in failed delegated authentication.
  • Any change to an instance, mapping, or matching rule.
  • Service account lockouts.
SymptomLikely causeFirst check
People in one domain cannot sign inAll agents for that domain down or unable to reach domain controllersAgent status, server health, network path
Import creates unexpected duplicatesMatching rule too weak or data differs between directoriesThe rule and examples of the duplicates
Import deactivates many peopleScope changed, OU moved, or directory connection returned partial dataImport scope and the last import report
One user cannot sign in, others canAccount locked, disabled, or expired passwordThe user in the directory
Group membership wrong in applicationsGroup not in scope, nested membership, or import delayGroup scope and the latest import
Slow sign-in only in one regionAgents far from domain controllersAgent placement and site settings
Agent upgrade failedServer restrictions or lack of permissionsWindows logs and installer output
flowchart TD
    P["Problem reported"] --> Q1{"One user or many?"}
    Q1 -- "One" --> U1["Check the account in the directory and the user in Okta"]
    Q1 -- "Many in one domain" --> U2["Check agents, domain controllers, and network for that domain"]
    Q1 -- "Many across domains" --> U3["Check recent Okta changes and the Okta service status"]
    U2 --> U4["Check import and sign-in logs"]
    U3 --> U4
    
Fig 23.1 — The number and spread of affected people points to the most likely layer of the problem
i
Tip

Set an alert for imports that would deactivate more than a small percentage of users at once. A broken connection or a changed scope can look like thousands of leavers, and a limit on deactivation per run prevents a bad import from locking out the company.

Everyday Analogy

When a whole street loses power, the electricity company checks the local substation. When only one house is dark, the problem is probably the fuse box. The number of affected homes points to where to look first.

24Performance, Scale, and Limits

Directories with tens or hundreds of thousands of people need planning. Most scale problems come from imports, groups, and sign-in bursts.

Where load comes from

  • Large initial imports. The first import of a big directory can take hours. Schedule it for a quiet time.
  • Large groups. Groups with thousands of members slow imports and pushes.
  • Frequent full imports. Running full imports every few minutes wastes effort, and incremental imports are lighter.
  • Sign-in peaks. Morning surges put load on agents and domain controllers at once.
  • Chatty attribute reads. Importing many unneeded attributes adds time and traffic.
  • Product limits. Okta sets limits on directory objects, agents per instance, and operation rates, which vary by license and change over time.
MeasureBenefit
Import only the OUs and attributes you needFaster imports and less data to check
Use incremental imports with an occasional full oneNear-current data with little load
Keep groups small and purpose-builtQuicker group operations
Run two or more agents per instance, near domain controllersCapacity and resilience for sign-in
Keep domain controllers healthy and well sitedFast password checks
Stagger large changesAvoids overloading agents and applications
Check current Okta limits before designingAvoids surprises in large estates
flowchart LR
    SIGN["Morning sign-in peak"] --> AG1["Agent 1"]
    SIGN --> AG2["Agent 2"]
    SIGN --> AG3["Agent 3"]
    AG1 --> DCA["Domain controller A"]
    AG2 --> DCB["Domain controller B"]
    AG3 --> DCB
    
Fig 24.1 — Several agents spread the sign-in peak across several domain controllers

The picture shows the simplest way to scale sign-in: add agents and make sure the domain controllers behind them can cope. The directory side is often the real limit, so check controller load as well as agent count.

!
Watch Out

Do not move a large group of OUs into or out of import scope on a busy morning. A scope change can trigger a large wave of creates or deactivations. Plan such changes for a quiet period, and review the import preview first.

Everyday Analogy

A supermarket opens more checkouts at the lunchtime rush, and keeps the stockroom quiet until the shop closes. Capacity is arranged where and when people actually queue.

25Change Management and Testing

Small changes to a directory integration can lock out thousands of people. Treat each one with the care of a production release.

Risky changes

  • Changing import scope, such as adding or removing OUs.
  • Changing the username format or matching rules.
  • Changing profile mappings or attribute priority.
  • Turning on deactivation, write-back, or group push.
  • Adding, removing, or upgrading agents.
  • Changing the service account or its permissions.
  • Retiring an instance.

A safe change routine

1

Describe the change

State what will change, who is affected, how many accounts, and how to undo it.

2

Test in a non-production setup

Use a test directory and a preview Okta organization where possible, with test users covering awkward cases.

3

Preview in production

Use import previews and dry runs to see what would be created, updated, or deactivated.

4

Pilot with a small group

Apply to one OU or a handful of volunteers, and verify sign-in and application access.

5

Roll out and watch

Release more widely, watch agent status, import results, and sign-in failures, and keep the previous settings recorded.

The test user set

Test userWhat it proves
Standard user in each domainBaseline import, mapping, and sign-in per domain
Two users with the same short name in different domainsUsername format uniqueness
User with accounts in two forestsMatching and linking
User with an accented or very long nameAttribute handling and length limits
Disabled and expired accountsLifecycle actions
User moved between OUsScope changes and mover handling
Member of nested and cross-domain groupsGroup import and push behavior
Locked-out accountAuthentication error handling
flowchart LR
    CH["Planned change"] --> TS["Test directory and test org"]
    TS --> PV["Import preview in production"]
    PV --> PL["Pilot group"]
    PL --> RO["Full rollout"]
    RO --> MN["Monitor and keep rollback ready"]
    
Fig 25.1 — Each change moves through test, preview, pilot, and rollout before it reaches everyone
i
Tip

Always keep an administrator who can sign in independently of the directory integration, such as a tightly controlled break-glass account. If a change breaks directory sign-in, you still need a way to reach the console and fix it.

Everyday Analogy

Before changing the wiring in a hospital, engineers test on a spare circuit, switch one ward at a time, and keep a backup generator ready. They do not flip the whole building at once and hope.

26Failure Scenarios and Recovery

A handful of failures cause most outages. Know them, and practice the fixes.

FailureSymptomRecoveryPrevention
All agents for a domain downNobody from that domain can sign inRestore an agent server, check network and service accountAt least two agents in separate locations, staggered patching
Service account locked or expiredImports and password checks failUnlock, reset, update the agent configurationNon-expiring or monitored password, alerts on lockout
Domain controller unavailableSlow or failing password checksAgents fall back to another controller, fix the failed oneSeveral controllers per site, accurate site configuration
Import deactivates many usersMass lockout shortly after an importReactivate affected users, correct the scope or dataDry-run previews and limits on deactivation per run
Wrong matches merged peopleOne person sees another’s accessUnlink, correct data, review the matching ruleStrong keys, sample testing
Duplicate users after migrationTwo Okta users for one personMerge or relink, clean up the extrasMatch on business keys before retiring old accounts
Time skewAuthentication errors only on some serversFix the time sourceMonitored time synchronization
Group push loop or collisionGroups change unexpectedly in both systemsStop the push, clean the mappingClear direction per group, prefixes
Retired instance removed too soonRemaining users from that directory lose accessRecreate the instance, relinkQuiet period and checks before removal

A recovery routine

1

Stabilize access

Use the break-glass account if needed, pause imports or deactivation if they are causing harm.

2

Find the cause

Check recent changes, agent status, domain controller health, and the logs.

3

Communicate

Tell affected people and support teams what is happening and what to expect.

4

Repair

Fix the cause, restore affected accounts, and verify with a few real users.

5

Learn

Write down the cause and add a check or an alert that would have caught it.

flowchart TD
    OUT["Sign-in failures reported"] --> A{"Only one domain?"}
    A -- "Yes" --> B{"Agents connected?"}
    B -- "No" --> C["Restore agents and network path"]
    B -- "Yes" --> D["Check domain controllers and service account"]
    A -- "No, all domains" --> E{"Recent change in Okta?"}
    E -- "Yes" --> F["Revert the change"]
    E -- "No" --> G["Check Okta service status and shared network"]
    
Fig 26.1 — A short triage path narrows an outage to agents, directories, or recent changes
!
Watch Out

Never test your break-glass account for the first time during an outage. Test it on a schedule, confirm it works without the directory, and confirm that its use triggers an alert.

Everyday Analogy

A ship’s crew rehearses fire drills so that when smoke appears, nobody has to read the instructions for the first time. The rehearsal is cheap, and the first real emergency is not the time to learn.

27Design Patterns That Work

These patterns have proved themselves in many organizations. Adapt them to your own estate.

PATTERN 1Recommended

One instance per real boundary

Create an instance for each forest, or for each domain with its own owners and rules. Boundaries in Okta match boundaries in the network and the organization, which makes troubleshooting straightforward.

PATTERN 2Recommended

Two agents minimum, in separate places

At least two agents per instance on separate servers and, where possible, separate sites, with staggered patching and an alert when fewer than two are connected.

PATTERN 3Recommended

Unique, stable usernames

Choose an Okta username format that is unique across all directories, and key identity on stable identifiers, so renames and moves do not create new people.

PATTERN 4Recommended

Business keys for matching

Link accounts across directories using employee numbers or other reliable business keys, after testing the rule on a sample and reviewing proposed matches.

PATTERN 5Recommended

HR owns business facts, directories own technical facts

Rank sources per attribute so title, department, and manager come from HR, and sign-in names and group membership come from each directory.

PATTERN 6Recommended

Least-privilege service accounts per directory

Use a separate, narrowly delegated account in each domain, with privileged accounts excluded from scope and from group push.

PATTERN 7Recommended

Federate partners, do not trust their forests

Let partners authenticate at their own identity provider and apply your access rules in Okta, instead of copying accounts or creating directory trusts.

flowchart TD
    DIRS["Many directories"] --> INST["One instance per boundary, two agents each"]
    INST --> ID["Unique usernames and stable identity keys"]
    ID --> MATCH["Matching on business keys links dual accounts"]
    MATCH --> PROF["One Okta profile, sources ranked per attribute"]
    PROF --> POL["Policies and applications see one identity"]
    PART["Partners"] -->|"Federation"| POL
    
Fig 27.1 — Many directories are reduced to one clean identity in Okta, with partners joining through federation
Connect many directories, but present one identity.
Everyday Analogy

A well-run airport has many airlines, gates, and baggage systems, yet each passenger holds one ticket and sees one set of signs. The complexity is behind the scenes.

28Anti-Patterns to Avoid

These habits look convenient and create lasting trouble. Recognize them early.

Anti-patterns

  • A single agent. One server failure stops sign-in for a whole domain.
  • Domain admin service account. The agent can do everything, and so can an attacker who takes it.
  • Import everything. Service accounts, test accounts, and administrators brought into Okta.
  • Matching on name only. Different people merged by mistake.
  • Colliding usernames. Same-named people overwriting each other.
  • Two sources, no priority. Values flip with every import.
  • Directory trusts for partners. A broad path into your forest to solve a narrow need.
  • Unlimited deactivation. A bad import locks out a large part of the company.
  • Forgotten forests. Leavers disabled in the main directory and left enabled elsewhere.
  • Untested break-glass. Discovered broken during the outage.

Better habits

  • Two or more agents. Separate servers, staggered patching.
  • Delegated, narrow rights. Per domain, on specific OUs.
  • Deliberate scope. Only the people who need Okta, with exclusions documented.
  • Strong match keys. Employee numbers, tested on samples.
  • Unique username format. Decided before the first big import.
  • Ranked sources. One owner per attribute.
  • Federation for partners. Each side manages its own people.
  • Limits and previews. Dry runs and caps on deactivation per run.
  • Regular reconciliation. HR status compared with every directory.
  • Tested emergency access. On a schedule, with alerts.
Anti-patternWhat it causesQuick fix
Single agentOutage on every patch or failureAdd a second agent in another location
Domain admin accountCatastrophic if compromisedReplace with delegated rights on specific OUs
Import everythingNoise, risk, and wrong deactivationsNarrow the OUs and add filters
Name-only matchingFalse mergesMatch on employee number plus another attribute
No source priorityFlip-flopping dataRank the sources per attribute
Partner forest trustBroad exposureMove to federation
!
Watch Out

The scariest anti-pattern is the one that works perfectly until the day it does not: a single powerful service account on a single agent server. It runs for years with no sign of trouble, and its failure or compromise is sudden and total.

Everyday Analogy

A building with one door, one key, and one caretaker runs smoothly until the caretaker is ill or the key is lost. Redundancy feels like waste until the day it is needed.

29Trade-Offs, Best Practices, and Common Mistakes

Every choice gives something up. Naming the trade-offs makes decisions deliberate, and a short checklist keeps good habits alive.

The main trade-offs

ChoiceGainCostLean toward it when
One instance per forest or domainIndependent rules, clear boundariesMore agents and mappings to keep consistentDirectories differ in ownership, network, or rules
Fewer, larger instancesSimplicityShared rules and shared failureOne team runs everything under common rules
Delegated authenticationPasswords stay in the directory, directory policies applySign-in depends on agents and domain controllersDirectory policies matter and connectivity is reliable
Password synchronizationSign-in works even if the directory is unreachableExtra component, password data in more placesResilience matters more than keeping one password store
Linking accounts across directoriesOne identity, one set of policiesRisk of wrong matchesReliable business keys exist
Separate Okta users per directory accountSimplicity and no matching riskPeople appear twice, policies repeatedThe accounts represent genuinely different roles or people
Group importReuses existing structureName collisions, directory remains masterDirectory teams own access
Group pushOkta is master, legacy apps still workWrite rights in the directoryCentral access management is the goal
Federation for partnersPartners manage their own peopleNeeds partner supportPartners have identity providers

Best practices

  • Draw the whole directory estate before connecting anything, including trusts and owners.
  • Audit overlaps in names, emails, UPNs, and employee numbers across all directories.
  • Decide the Okta username format and matching rules before the first large import.
  • Install at least two agents per instance on separate servers, near healthy domain controllers.
  • Use narrowly delegated service accounts, one per domain, and exclude privileged accounts.
  • Import only needed OUs and attributes, and rank sources per attribute.
  • Keep group names distinct with prefixes, and decide import or push direction for each group.
  • Start with lifecycle actions off, preview imports, pilot, then roll out.
  • Monitor agents, imports, sign-in failures, and configuration changes.
  • Reconcile HR status with enabled accounts in every directory.
  • Test break-glass access on a schedule.

Common mistakes

  • Assuming short sign-in names are unique across domains.
  • Patching both agent servers at the same time.
  • Letting two sources write the same attribute with equal priority.
  • Turning on deactivation before verifying the import scope.
  • Forgetting that a moved account has a new directory identifier.
  • Ignoring time synchronization and DNS.
  • Creating directory trusts to solve application-level needs.
quadrantChart
    title Choosing the integration shape
    x-axis Same team and rules --> Different teams and rules
    y-axis Directories well connected --> Directories isolated
    quadrant-1 Federate or separate instance with local agents
    quadrant-2 Separate instances with local agents
    quadrant-3 One instance, shared rules
    quadrant-4 Separate instances, central standards
    Child domains one team: [0.2, 0.2]
    Regional domains own admins: [0.7, 0.25]
    Acquired company forest: [0.75, 0.6]
    Partner forest: [0.9, 0.9]
    
Fig 29.1 — The more different the teams and rules, and the more isolated the network, the more separation the design needs

The picture is a way of thinking, not a measurement. Directories run by one team and well connected can share an instance. Directories run by different teams with different rules deserve their own instances. Isolated or partner directories suggest federation or local agents with careful agreements.

Everyday Analogy

A company chooses between one big warehouse and several local depots depending on how far apart the customers are and how different their needs are. The right choice depends on geography and demand.

30Worked Example: Skybridge Energy

To pull everything together, here is an invented company and a complete multi-directory design. The company, numbers, and names are made up for teaching.

The company

Skybridge Energy is a fictional utility with 7,500 employees. It has a corporate forest with three domains: head office, Europe, and the Americas. It acquired a smaller engineering firm, Ridgeline Engineering, with 900 people in a separate forest. A third, small forest holds an operational technology network for power plants, with 150 accounts and strict separation. A consulting partner supplies about 80 contractors who work on projects. The company wants one sign-in for all cloud applications within a quarter.

7,500
Corporate employees
900
Acquired engineers
150
Operational technology accounts
80
Partner contractors

The design

DirectoryOkta approachKey decisions
Corporate forest, three domainsOne instance per domain, two agents each, close to local controllersDelegated authentication, narrow service account per domain, OUs scoped by team, administrators excluded
Ridgeline forestSeparate instance, two agents inside the forestUsername format with company element, employee-number matching for the 22 people with accounts in both forests, department codes translated by mapping
Operational technology forestNot connectedKept isolated by design, separate controls, reviewed twice a year
Consulting partnerFederation from the partner’s identity providerLimited application access, sponsor required, end dates
HR systemMaster for business attributesTitle, department, manager, and dates from HR, sign-in names and groups from directories
flowchart LR
    CF1["Corporate: head office domain"] --> I1["Instance HQ"]
    CF2["Corporate: Europe domain"] --> I2["Instance Europe"]
    CF3["Corporate: Americas domain"] --> I3["Instance Americas"]
    RF["Ridgeline forest"] --> I4["Instance Ridgeline"]
    I1 --> OKU["Okta profile: one identity per person"]
    I2 --> OKU
    I3 --> OKU
    I4 --> OKU
    HR["HR system"] --> OKU
    PIDP["Partner identity provider"] -->|"Federation"| OKU
    OT["OT forest"] -.->|"Not connected"| OKU
    
Fig 30.1 — Four directory instances and HR feed one Okta profile, the partner joins by federation, and the operational technology forest stays isolated

How the first six months went

The audit before connecting Ridgeline found 22 people with accounts in both forests, 14 pairs of different people sharing a short name, and a group called “Engineers” in both. Matching on employee number linked all 22 dual-account people, after two typing errors were fixed in the HR system. The username format with a company element handled the short-name collisions without anyone noticing, and groups were imported with prefixes.

During the pilot, a test found that Ridgeline’s agents were using a domain controller in a distant site because of a missing subnet entry. Correcting the site configuration cut sign-in time by more than half. In month two, a patching window restarted both agents in the Europe domain at the same time, and sign-ins failed for six minutes. The team staggered patching afterward and added an alert for fewer than two connected agents. In month four, a scope change that moved an OU caused an import to propose deactivating 400 users. The cap on deactivation per run held the import, and the team corrected the scope before any account was affected.

The quarterly reconciliation of HR status against enabled accounts in all four directories found 31 leavers still enabled in the Ridgeline forest. They were disabled the same day, and the leaver process was extended to include all linked directories.

Result

Skybridge has one sign-in experience across four directories plus a federated partner, with two agents per instance, narrow service accounts, unique usernames, safe matching, and capped lifecycle actions. The most valuable work was not clever technology. It was drawing the estate, deciding who owns each attribute, and agreeing the matching and username rules before the first import.

Everyday Analogy

A group of neighboring towns agrees to issue one shared library card. Each town keeps its own records, but the card works everywhere, and a central desk makes sure the same person is never given two cards by mistake.

31Frequently Asked Questions

Short answers to questions that come up often. Agent versions, features, limits, and menu names change over time, so confirm exact details in the current Okta documentation.

1

How does Okta connect to Active Directory?

Through a small agent installed on a domain-joined Windows server. The agent opens an outbound secure connection to Okta and performs imports, password checks, and other operations against a domain controller.

2

Do I need inbound firewall rules?

No. The agent connects outward to Okta. You do need outbound access from the agent server to Okta and access from the agent to the domain controllers.

3

How many agents do I need?

At least two per instance, on separate servers and ideally separate sites, with more for large estates or heavy sign-in loads. Check current Okta sizing guidance.

4

Should I use one instance or one per domain?

It depends on ownership, network reach, and rules. Separate forests normally need separate instances. Domains with different owners or rules often benefit from their own instances.

5

What if two people have the same username in different domains?

Use an Okta username format that is unique across directories, for example by including a directory-specific element or an employee number.

6

Can one person be linked to accounts in several forests?

Yes, through matching rules that link directory accounts to a single Okta user. Use reliable keys such as employee number, and review proposed matches first.

7

Where are passwords checked?

With delegated authentication, in Active Directory through the agent. Password synchronization is an alternative that copies password changes to Okta in a protected form.

8

What permissions does the service account need?

Only what the integration uses: read access on the imported OUs, plus reset or write rights on specific OUs if Okta writes back. Never domain administrator rights.

9

Should administrator accounts be in Okta?

Generally keep privileged directory accounts out of import scope and group push, and manage them with separate controls.

10

How do I handle partner directories?

Prefer federation from the partner’s identity provider, so they manage their own people. Avoid directory trusts and avoid placing your agent in their network unless both sides agree.

11

What happens when a user moves between domains?

The moved account has a new directory identifier. Match it to the existing Okta user using a business key so the Okta identity continues.

12

Why do values keep flipping between imports?

Two sources are writing the same attribute at equal priority. Rank the sources, or choose a source per attribute.

13

How do I avoid mass lockouts from a bad import?

Preview imports, cap deactivations per run, change scope in quiet periods, and alert on large proposed changes.

14

What should I monitor?

Connected agents per instance, import results, delegated authentication failures and latency, service account lockouts, and any change to instances, mappings, or matching rules.

15

Where should I start?

Draw your directories, audit overlaps, pick the username and matching rules, connect one directory with two agents, import with lifecycle actions off, pilot, and then add the next directory.

32Summary and Key Takeaways

Connecting many Active Directory domains and forests to Okta is mostly a matter of clear boundaries, stable identities, and careful change.

Key Takeaways

  • The agent is the bridge. It connects outward to Okta, works against domain controllers, and should always run as at least two agents per instance in separate places.
  • Match instances to real boundaries. One per forest or per domain with its own owners and rules, each with agents close to its own controllers.
  • Make identities unique and stable. Choose usernames that cannot collide, and rely on stable identifiers, not names, to remember who is who.
  • Link carefully. Match people with several directory accounts using strong business keys, and review matches before turning on automation.
  • Give every attribute one owner. HR for business facts, directories for technical facts, with ranked sources to stop flip-flopping.
  • Protect the integration. Narrow service accounts per domain, hardened agent servers, privileged accounts excluded, and partners federated rather than trusted.
  • Change safely and watch closely. Preview, pilot, cap deactivations, monitor agents and imports, reconcile leavers across every directory, and test emergency access.
i
Final Note

Okta changes agent versions, features, limits, and menu names over time, and some capabilities depend on your plan. Use this post to understand the ideas, and confirm exact steps and requirements in your own admin console and the current Okta documentation before building.

Many directories behind the scenes, one trustworthy identity in front.