App Provisioning in Okta: Create, Update, Deactivate
A plain-English guide to how Okta builds, changes and closes accounts inside your apps automatically: how each step works, what Okta actually sends, how to set it up, what can go wrong, and how to keep it safe.
Every working day, something quiet and important happens inside a company. A new person starts and needs accounts in a dozen apps. A colleague changes team and needs a different set of access and a corrected title in every system. Another person leaves, and every account they hold must be closed before the end of the day. If these three events are handled by hand, they are slow, they are forgotten, and mistakes pile up. If they are handled by a trusted automatic system, they happen in seconds, the same way every time, and leave a record.
Okta is one such system. Its job is to know who people are and what they should have, and then to make the apps match. The feature that does this is called provisioning, and its three core actions are create, update and deactivate. This guide explains all three from zero. Every new word is explained when it first appears, and each big idea comes with an everyday comparison. By the end you will know what Okta sends to an app, when it sends it, how to set it up, how to find the cause when something fails, and which habits keep the whole thing safe and tidy.
1Why Accounts Must Follow People
Signing in proves who someone is. It does not make sure the app has a correct account for them. That second job needs its own solution.
Two different problems
Single sign-on solves the problem of passwords. A person proves themselves once to Okta, and Okta tells each app who they are. But before any app can welcome a person, it usually needs a record for them: an account with a name, an email, a role and some settings. Single sign-on does not build that record. Somebody, or something, must create it, keep it correct as the person changes, and close it when the person leaves.
This second problem is called provisioning. The word comes from “provide”. The company provides each person with the accounts they need. The opposite word, deprovisioning, means taking those accounts away.
What happens without automation
In a company without automatic provisioning, each app has its own administrator or its own spreadsheet. When a new hire starts, someone sends a request to every app owner. Some respond in an hour, some in three days. The new hire spends the first week waiting. When the person changes team, nobody remembers to update their title or remove their old access. When they leave, a checklist is sent around, and one or two apps are always forgotten. Months later, an audit finds former employees with active accounts in systems that hold customer data.
Think of a school that issues locker keys, library cards, lab passes and canteen accounts. If a clerk in each department handles its own list, a new student waits days to get everything, and a student who leaves may still hold a lab key for years. A central office that updates all lists at once, the moment a student joins, moves or leaves, is the idea behind provisioning.
The three actions map to three moments in every working life: joining, moving and leaving. People in security and human resources often call them joiner, mover and leaver. Provisioning is the technical machinery behind those three moments.
2What Are Create, Update and Deactivate?
Three simple verbs describe everything an identity system needs to do to an account over its life.
Create
Create means making a new account in an app for a person who does not yet have one. Okta sends the app the facts it needs, such as name, email and role. The app builds the account and returns its own identifier for it. From that moment, the person can use the app, and Okta remembers which app account belongs to which Okta user.
Update
Update means changing an existing account when something about the person changes. Maybe they were promoted and their title changed. Maybe they moved to another office and their location changed. Maybe they got married and their last name changed. Okta notices the change in the central profile and sends the new values to each app that stores them.
Deactivate
Deactivate means switching an account off, so the person can no longer use it, while usually keeping the account’s data in the app. It happens when a person leaves the company, when they lose access to the app, or when an administrator decides so. Deactivation is the safe, reversible way to remove access. Deleting an account is a different and more drastic step, which we cover later.
| Action | Plain meaning | Typical trigger in Okta | Reversible? |
|---|---|---|---|
| Create | Make a new account in the app | The person is assigned to the app, directly or through a group | Yes, by deactivating |
| Update | Change details of an existing account | A mapped profile attribute changes in Okta | Yes, by changing it back |
| Deactivate | Switch the account off | The person is unassigned from the app, or deactivated in Okta | Yes, by reactivating |
Joiner, mover, leaver
These three verbs line up with the three life events. A joiner triggers create. A mover triggers update, and sometimes also creates and deactivates, because a new team may bring different apps. A leaver triggers deactivate across every app at once. Designing provisioning means deciding, for each event, what should happen in each app.
Think of a hotel guest record. Check-in creates the record. A change of room or a late checkout updates it. Check-out deactivates it, but the hotel keeps the folder for billing and audit. Provisioning gives every app the same kind of careful record keeping.
3How Okta Thinks About Provisioning
Okta treats itself as the source of truth for who people are, and treats each app as a place that must match.
Inside Okta, every person has one central profile in the Universal Directory, Okta’s list of people and their facts. Every app that Okta provisions gets its own separate record of that person, called the app user. The app user is Okta’s note about the person’s account in that specific app. It holds the app-specific facts, such as the app username and the app’s own identifier for the person, plus a status that says whether the account is working.
Two directions
Provisioning in Okta can flow in two directions, and each direction is switched on separately in the app’s settings.
To the app
Okta is the boss. It pushes creates, updates and deactivations to the app. This is the direction this guide focuses on, and the one people usually mean by provisioning.
To Okta
The app is the boss for some facts. Okta imports users and changes from the app, to find existing people and keep certain details in step.
The settings on the Provisioning tab
When an app supports provisioning, its page in the Admin Console shows a Provisioning tab. In the “to app” direction, the tab typically offers a short list of switches that correspond to the three core actions.
- Create Users. When a person is assigned to the app, Okta creates their account in the app.
- Update User Attributes. When a mapped profile fact changes in Okta, Okta sends the new value to the app.
- Deactivate Users. When a person is unassigned from the app, or deactivated in Okta, Okta switches off their account in the app.
- Sync Password. For some apps, Okta can also keep a password in step. This is an optional extra, and often avoided where single sign-on is in use.
The exact names and available switches depend on the app and on the Okta version. Some apps offer only some of the actions, depending on what the app itself supports.
Imagine a central staff register that sends instructions to the offices of many branches. The “to app” direction is the register telling each branch to open a file, correct a file or close a file. The “to Okta” direction is a branch reporting back, “we already have a file for this person, here are its details”.
Assignment is the trigger for almost everything. A person who is not assigned to an app never gets an account created there by Okta, and a person who is unassigned has their account deactivated. Assignment is how Okta decides who belongs in each app.
4Ways to Get Accounts into Apps
Provisioning through Okta is one of several ways to create accounts. Seeing them together shows when each one fits.
| Method | Who does the work? | Handles create? | Handles update? | Handles deactivate? |
|---|---|---|---|---|
| Manual in each app | An app administrator | Yes | Only if remembered | Only if remembered |
| Bulk file import | An administrator | Yes, once | No | No |
| Just-in-time at first login | The app, using the login message | Yes | At later logins, if the app allows | No |
| SCIM or native integration | Okta, calling the app | Yes | Yes | Yes |
| Custom workflow or script | A program that you build | Yes | Yes | Yes |
Reading the table in plain words
Manual work is fine for tiny teams. Bulk import is good for a one-time move. Just-in-time creation, which builds the account when a person first logs in, is quick but it never closes accounts. The method in this guide, in which Okta itself calls the app to create, update and deactivate, is the only common method that covers the whole life of an account automatically. A custom workflow can do the same job for apps that lack a standard interface, but you must build and maintain it.
Full lifecycle control
Choose Okta provisioning when the app holds sensitive data, costs money per account, or must remove access quickly.
Quick start
Choose just-in-time when accounts hold little data and a slow cleanup of leavers is acceptable.
One-time moves
Choose a bulk import to load an existing list, and then switch to automatic provisioning.
Odd cases
Choose a custom workflow when an app has no standard interface but does have an interface of some kind.
Think of how a restaurant seats guests. A host who writes names in a book is the manual method. A walk-in table filled at the door is just-in-time. A reservation system that books, changes and cancels tables across all restaurants of a chain is Okta provisioning. Only the last one keeps every table list correct without anyone remembering to clean up.
5Core Vocabulary You Must Know
Eighteen small words carry most of the meaning in this topic. Learn them once and every Okta provisioning screen becomes easier to read.
Provisioning
Creating, updating and removing accounts in apps so they match the people and access that the company intends.
Deprovisioning
Taking accounts or access away, usually by deactivating them, when they are no longer needed.
Okta User
The central profile of a person in Universal Directory. It is the master from which app records are built.
App User
Okta’s note about one person’s account in one app, with the app username, the app’s identifier and a status.
Assignment
Linking a person, or a group of people, to an app. It is what tells Okta that an account should exist.
SCIM
System for Cross-domain Identity Management. A standard set of web requests for creating, reading, changing and closing accounts.
Connector
The piece that lets Okta talk to one particular app. It may be a SCIM connection or a built-in integration.
API
The set of web addresses and rules an app offers so other programs can work with it. Okta provisions through the app’s API.
Attribute Mapping
The rules connecting a field in the Okta profile to a field in the app profile, such as work email to email.
Profile Editor
The admin screen where profiles and mappings are defined and edited.
Source of Truth
The one system trusted to hold the right value for a fact. Okta, an HR system or a directory may play this role.
Push Groups
An Okta feature that creates matching groups in an app and keeps their membership in step with Okta groups.
Matching
Deciding whether an account already exists in the app for an Okta user, usually by comparing username or email.
Linking
Connecting an existing app account to an Okta user, so that Okta manages it from then on.
Status
The condition of an app user, such as pending, active, error or deprovisioned.
Provisioning Task
A waiting job that failed or needs attention, shown on a tasks page so an administrator can retry or fix it.
Rate Limit
A cap on how many requests an app accepts in a given time. Exceeding it causes temporary refusals.
System Log
Okta’s searchable record of what happened, including provisioning attempts and their results.
Think of a head office that keeps a master list of staff, the Okta users. Each branch keeps its own local card for each person, the app users. A standard form, SCIM, lets the head office ask a branch to open, change or close a card. A rules sheet, the mapping, says which master-list fact goes to which box on the local card. The delivery is triggered by a posting order, the assignment.
6Architecture and Components
Provisioning involves a source of people, Okta’s engine, a connector, and the app itself, each with a clear job.
The architecture looks like a delivery chain. At the start is the place where facts about people first appear. In the middle is Okta, which collects, combines and decides. At the end is the app, which receives instructions and changes its own records. Between them, a connector translates Okta’s decisions into the language the app understands.
flowchart LR
SRC["Source of people: HR system or directory"] --> UD["Okta Universal Directory"]
UD --> GR["Groups and group rules"]
GR --> AS["App assignments"]
AS --> ENG["Okta provisioning engine"]
UD --> MAP["Attribute mappings"]
MAP --> ENG
ENG --> CON["Connector: SCIM or native integration"]
CON --> APP["Application accounts"]
APP --> CON
CON --> ENG
ENG --> AU["App user records and status"]
ENG --> LOG["System Log"]
ENG --> TSK["Tasks for failed jobs"]
The parts, one by one
The source of people. Many companies keep the original list of employees in an HR system or a directory. Okta imports from it, so the facts start in a trusted place.
Universal Directory. Okta’s central list. Each person has one profile here. Provisioning copies selected facts from this profile into app accounts.
Groups and rules. Groups collect people by team, role or place, and rules fill the groups automatically from profile facts. Groups are the usual way to decide who gets which apps.
App assignments. Assigning a group to an app tells Okta that every member should have an account there.
Attribute mappings. The rules that decide which profile facts are sent and how they are named and shaped for the app.
The provisioning engine. The part of Okta that watches for changes, decides what must be created, updated or deactivated, queues the jobs and records the results.
The connector. It turns each decision into a web request that the app understands, and reads the app’s reply. Where the app supports SCIM, this is a standard connector. Otherwise it may be a built-in integration made for that specific app.
The app user record. Okta stores the app account’s identifier and status, so that later updates and deactivations are sent to the right account.
Tasks and the System Log. Failures appear as tasks that an administrator can retry, and every attempt is recorded in the log.
Okta can only do what the app’s interface allows. If an app offers create and update but no way to deactivate, Okta cannot deactivate there. Always read what each connector supports before promising that leavers will be removed automatically.
Think of a postal system. Letters start at a sender, pass through a central sorting office, and travel by a courier to the destination. The courier understands the destination’s rules. If the destination refuses a certain kind of parcel, the sorting office knows only because the courier reports it back.
7SCIM in Plain Words
SCIM is the most common way Okta talks to apps. Understanding it makes every provisioning message easier to read.
SCIM stands for System for Cross-domain Identity Management. It is a pair of public standards, numbered RFC 7643 and RFC 7644, that describe two things: what a user record should look like, and what web requests may be used to create, read, change and remove such records. Before SCIM, each app had its own private way of doing this, and every integration was custom work. With SCIM, an app that follows the standard can be provisioned by any identity system that also follows it.
Web requests in simple terms
An app that supports SCIM publishes a web address, often ending with the word “Users”. The identity system sends requests to this address, using a few common request types. Here is how they match the three actions.
| Request type | Plain meaning | Used for |
|---|---|---|
| Search or read | Ask the app whether a user with a given username exists | Matching before create |
| Post | Send a new user record to be created | Create |
| Patch or put | Send changes to an existing user record | Update, and also deactivate |
| Delete | Remove the user record entirely | Rarely used by Okta for deprovisioning |
How deactivate works in SCIM
A SCIM user record has a field called “active”. It is true when the account works and false when it does not. When Okta deactivates an account, it normally sends a change that sets this field to false. The app keeps the record and its data, but blocks use. This is why deactivation is reversible: Okta can later set the field back to true.
The shape of a user record
A SCIM user record contains a few standard fields, such as a username, a name made of given and family parts, a list of emails, and the active flag. It can also carry extension fields for company-specific facts. Because the shape is standard, mapping between Okta’s profile and the app’s record becomes a matter of matching field names.
Authentication between Okta and the app
The app must know that requests really come from Okta. SCIM connections therefore use a credential, most often a long secret token that Okta presents with each request, or an OAuth-based credential that expires and is renewed. Keep these credentials safe, since anyone holding one can create and delete accounts.
Many popular apps come with a ready-made Okta connector that already knows their SCIM details, so you only fill in the base address and a credential. For an app that supports SCIM but has no ready connector, Okta offers a generic SCIM connector that you configure yourself.
SCIM is like a standard order form used by all shops of an industry. The form has fixed boxes for name, address and status. Any head office that knows the form can place, change or cancel an order at any shop that accepts it, without learning each shop’s private paperwork.
8Create, in Detail
Creating an account looks like one step, but Okta actually performs several small checks to avoid mistakes and duplicates.
sequenceDiagram
participant A as Administrator or Group Rule
participant O as Okta Engine
participant C as Connector
participant P as Application
A->>O: Assign the person to the app
O->>O: Build the app profile from the mappings
O->>C: Ask whether a matching user exists
C->>P: Search for the username
P-->>C: No match found
C->>P: Create the user with the mapped attributes
P-->>C: Success with the app's own identifier
C-->>O: Report success
O->>O: Save the app user with its identifier and status
The person is assigned
A group rule places them in a group, and the group is assigned to the app. Or an administrator assigns them directly.
Okta checks the settings
The engine confirms that Create Users is switched on for the app, and that the person’s status allows creation.
Okta builds the app profile
It applies the mappings, turning the Okta profile into the set of facts the app expects. Required facts must be present.
Okta looks for an existing account
Before creating, it searches the app for a user with the same username. This avoids duplicate accounts when the person already exists.
If none exists, create
Okta sends the create request. The app builds the account and returns its own identifier for it.
If one exists, link
If the app already has a matching account, Okta can link to it instead of creating a second one, and then manage it from now on.
Okta saves the result
It stores the app user record with the identifier and the status. The person’s tile now works, and updates know where to go.
If it fails, Okta tells you
A failed create becomes a task. The reason is recorded, so an administrator can fix the cause and retry.
What the app does with the request
The app checks that required facts are present and valid, makes sure the username is unique, applies its own rules, such as license limits, and then creates the record. Some apps also send the new person a welcome email. Others place the account in a “pending” state until the person signs in for the first time. Know how your app behaves, so that the first-day experience is what you expect.
A new library member is first looked up in the register to see whether a card exists. Only if none is found does the librarian make a new one. Looking before creating is the most important habit in provisioning, since it prevents the two-cards-for-one-person problem.
Some apps charge for every account. Assigning a large group by mistake can create hundreds of paid accounts in minutes. Always check the size of a group before assigning it to a licensed app.
9Matching and Linking Existing Accounts
Most companies turn on provisioning for apps that already have users. Matching decides whether those people are recognized or duplicated.
Imagine an app with two hundred existing accounts that were created by hand over several years. You now switch on Okta provisioning and assign everyone. If Okta cannot recognize the old accounts, it creates two hundred new ones, or fails with errors, because the usernames are already taken. To avoid that, Okta compares the person’s profile with the app’s accounts, using one value as the match key, usually the username or email.
Two ways to bring old accounts under Okta’s control
- Match during create. When Okta is about to create an account, it searches for an existing one with the same key, and links to it if found.
- Import from the app first. Okta imports the app’s existing users into a staging list, matches each one to an Okta user using rules you set, and asks an administrator to confirm. Only confirmed matches are linked.
Why exactness matters
Matching is usually exact. A difference as small as a capital letter, a missing dot or a different email domain can make a match fail. For example, “sam.lee@example.com” and “samlee@example.com” look like two different people. Before a big rollout, export the app’s user list and compare it with Okta’s. Fix mismatches in advance, either in Okta or in the app.
| Situation | What Okta does | What you should do |
|---|---|---|
| Exact match found | Links to the existing account | Nothing, but spot-check a few |
| No match, new person | Creates a new account | Confirm the person should have access |
| No match, but a similar account exists | May create a duplicate or fail | Fix the key before assigning |
| Two Okta users match one app account | Reports a conflict | Resolve the duplicate people in Okta first |
| App account has no matching Okta user | Leaves it unmanaged | Decide whether to remove or adopt it |
Example: moving a chat tool under Okta
A company has 300 people in a chat tool, created by hand. The administrator first exports the tool’s user list and compares emails with Okta. Twelve people use old or personal emails. The administrator fixes those in the tool. Then provisioning is switched on, an import is run, and Okta matches 298 people automatically. Two leftover accounts belong to people who left long ago. The administrator confirms the matches and removes the stale accounts.
It is like merging two address books. If you simply paste one into the other, many people appear twice with slightly different spellings. A careful merge first compares names, fixes spellings and only then combines the lists. Matching before provisioning is that careful merge.
10Attribute Mapping: Which Fact Goes Where
A mapping is a simple rule saying “this box in Okta feeds that box in the app”. Good mappings are the quiet heart of good provisioning.
Okta’s profile and the app’s profile are two different forms with different box names. The Okta form may say “department” and the app’s form may say “dept”. A mapping connects them. In the Profile Editor, each app has a mapping screen with two directions. The “Okta to App” mapping controls what Okta pushes out. The “App to Okta” mapping controls what Okta pulls in during imports.
Kinds of mapping
Direct copy
The Okta value is copied unchanged, such as first name to first name. Most mappings are of this type.
Expression
The value is built from one or more facts using Okta’s expression language, such as joining first and last name into a display name.
Constant
The same value is sent for everyone, such as a default role of “basic user”.
Not mapped
The fact is not sent at all. Use this for fields the app should manage itself.
When a mapping applies
Each mapping has a setting for when it is used. One choice is “create and update”, which means the value is sent when the account is first made and again whenever it changes in Okta. Another choice is “create only”, which sends the value once, when the account is first made, and leaves it alone afterwards. Create-only is useful for facts that the app owner will edit later, such as a preferred display name or a local role.
| App field | Okta source | Apply when | Why |
|---|---|---|---|
| Username | Primary email | Create only | A stable key must not change by accident |
| Primary email | Create and update | The app should follow email changes | |
| First and last name | Profile names | Create and update | Names change and apps should match |
| Title | Job title | Create and update | Promotions should flow everywhere |
| Department | Department | Create and update | Movers should reflect new teams |
| Default role | A fixed value | Create only | Start with minimum access, adjust in the app later |
Who is the master of a fact?
For each fact, one system should be the master, which means its value wins. If Okta is the master of job title, the app’s title is overwritten at every update. If the app is the master, Okta imports the value instead. Two masters for one fact cause a tug of war in which each side keeps overwriting the other. Decide who is the master for each field, and map in only one direction.
Never map a field that people can edit themselves into a role or permission field. If a person can change their own “department” and the app turns that into admin rights, someone will eventually give themselves more access than intended.
A mapping is like a translation sheet between two forms. The head office form says “Surname” and the branch form says “Family name”. The sheet says which goes where and who has the final say on spelling. If both sides edit the same box, the spelling flips back and forth forever.
11Update, in Detail
People change all the time. Updates make sure each app keeps up without anyone remembering to type the change in twenty places.
flowchart TD
A["A profile fact changes in Okta"] --> B{"Is the fact mapped to this app?"}
B -->|"No"| X["No action for this app"]
B -->|"Yes"| C{"Is Update User Attributes switched on?"}
C -->|"No"| X
C -->|"Yes"| D{"Is the mapping set to create and update?"}
D -->|"No"| X
D -->|"Yes"| E["Okta builds the new value from the mapping"]
E --> F["Connector sends the change to the app"]
F --> G{"Did the app accept it?"}
G -->|"Yes"| H["Status stays active and the log records success"]
G -->|"No"| I["A task appears with the reason"]
What triggers an update
An update starts whenever a mapped fact changes in the Okta profile. The change may come from an administrator editing the profile, from an HR system that Okta imports from, from a directory sync, or from the person themselves if you allow self-editing of certain fields. Okta compares old and new values, and only sends changes to apps that actually map the changed fact.
Changes that move people between apps
Some updates have a bigger effect than just a corrected value. If a person moves from Sales to Finance, a group rule may remove them from the Sales group and add them to the Finance group. Apps assigned only to the Sales group are then unassigned, which triggers deactivation there. Apps assigned to the Finance group are newly assigned, which triggers creation there. A single department change can therefore cause updates, creates and deactivations at the same time.
The change happens
HR records a promotion, or an administrator edits the profile.
Okta spots which facts differ
The engine compares the new profile with the old and lists the changed facts.
Group rules re-run
Group memberships update, which may change assignments to apps.
Okta prepares the messages
For each affected app, it builds the update, create or deactivate that the new situation needs.
The connector delivers
The messages go to the apps, usually within seconds to a few minutes, depending on the app and on load.
Results are recorded
Successes are logged. Failures become tasks to fix and retry.
Updates that do not stick
If you see an update sent successfully but the value in the app keeps changing back, an app owner or another integration is probably overwriting it. That means two masters exist for the fact. Settle who is in charge and map the fact in only one direction.
Test an update with one harmless change on one test user, such as a middle initial. Watch how long it takes to appear in the app and what the System Log says. That small test teaches you the real timing of your app.
Think of a change of address. You tell the main post office once, and it forwards the news to each business that holds your address. If the post office knows which businesses care about addresses, only those are told. A change of job title does not need to bother the bank.
12Deactivate, in Detail
Closing accounts is the most important action for security, and the one most often handled badly. This chapter explains what really happens.
flowchart TD
S["Reason to remove access"] --> R1{"Which reason?"}
R1 -->|"Person unassigned from the app"| D1["Okta marks the app user for deactivation"]
R1 -->|"Okta user deactivated"| D1
R1 -->|"Group membership lost"| D1
D1 --> Q{"Is Deactivate Users switched on?"}
Q -->|"No"| N["Account stays active in the app. Manual cleanup needed"]
Q -->|"Yes"| E["Connector tells the app to switch off the account"]
E --> F{"Did the app confirm?"}
F -->|"Yes"| G["App user status becomes deprovisioned"]
F -->|"No"| H["A task appears with the reason"]
What causes deactivation
- Unassigning a person from the app. If an administrator removes the assignment, Okta deactivates the account in the app.
- Losing a group. If the person leaves the only group that gave them the app, they are no longer assigned, and the same thing follows.
- Deactivating the Okta user. When a person leaves the company and their Okta user is deactivated, Okta deactivates their accounts in every provisioned app.
Deactivate versus delete
Beginners often mix these. Deactivate switches the account off but keeps it, with its data, in the app. Delete removes it completely. Okta’s usual behavior for leavers is to deactivate, not delete, because deactivation is reversible and keeps records that audits and handover work may need. Deletion, if wanted, is usually done later in the app itself, or through a separate process, after any retention period passes.
| Action | Effect on the account | Effect on the data | Reversible? |
|---|---|---|---|
| Deactivate | Cannot be used | Kept in the app | Yes |
| Delete | Removed completely | May be lost, depending on the app | Usually not |
| Remove license only | Account remains with limited features | Kept | Yes |
Things deactivation does not do
- It may not end live sessions. A person already signed in to the app may stay signed in until the session expires.
- It may not free the license. Some apps still count a deactivated account toward the paid seats until it is deleted or its license is removed.
- It does not transfer work. Files, tickets and projects owned by the person stay with the deactivated account unless someone reassigns them.
- It does not touch other sign-in paths. Saved passwords, access tokens and keys created inside the app may still work.
Switching off Deactivate Users is the most dangerous setting on the page. With it off, leavers keep their accounts in the app until someone cleans up by hand. Keep it on for every provisioned app unless there is a written reason.
When an employee leaves, the office cancels their badge so the doors no longer open for them. That is deactivation. The employee’s desk papers are still kept for a while, and a manager reviews them. That is the retained data. Shredding the papers at once, deletion, would be fast but could not be undone.
13Groups, Roles and Entitlements
Creating an account is only half the story. People also need the right role inside the app, and that role must be kept correct.
Assignment by group
The cleanest way to decide who gets an account is to assign apps to groups, not to individuals. Group rules place people in groups from their profile facts, so that a new person in the Sales department appears in the Sales group automatically. The Sales group is assigned to the sales apps, so provisioning creates the accounts. When the person leaves Sales, the opposite happens.
Roles inside the app
Many apps have their own roles, such as viewer, editor and admin. Okta can send a role as part of the create or update. There are three common patterns.
- A fixed default role. Every new account starts with the lowest role. Extra rights are given inside the app, or through a separate request process.
- A role chosen from a profile fact. The mapping turns a fact, such as job level, into a role. Use with caution, and only with facts that people cannot edit themselves.
- A role chosen by assignment. Some connectors let you pick a role at assignment time, so different groups bring different roles.
Push Groups
Some apps have groups of their own, used to give permissions to many people at once. Okta’s Push Groups feature creates a matching group in the app and keeps its members in step with an Okta group. When someone joins the Okta group, they are added to the app’s group, and when they leave, they are removed. This lets the app’s permissions follow Okta’s group structure, with no manual work in the app.
| Need | Best tool | Note |
|---|---|---|
| Decide who has an account | Assignment of groups to the app | Controls create and deactivate |
| Set a starting role | A mapping with a fixed or derived value | Keep the default low |
| Keep app groups matching Okta groups | Push Groups | Okta stays the master of membership |
| Give extra rights for a short time | A request and approval process | Avoids permanent over-access |
Example: three-level access in a project tool
A project tool has viewer, editor and admin roles. The company creates three Okta groups with matching names and assigns each group to the app with a different role. Most people land in viewer or editor through department rules. Only a small, reviewed group reaches admin. When a person is moved between groups, provisioning updates their role automatically.
At a conference, a badge gets you into the building, and a colored ribbon says what you may do inside. Provisioning issues both: the badge when you are created, and the ribbon when you are placed in a role. If the organizers change your ribbon in the main list, the ribbon at the door changes too.
14The Life of an App User
Each person’s account in each app moves through states. Knowing them helps you read the Admin Console and find stuck accounts.
flowchart LR
NA["Not assigned"] -->|"Assign"| PE["Pending"]
PE -->|"Create succeeds"| AC["Active"]
PE -->|"Create fails"| ER["Error"]
ER -->|"Fix and retry"| PE
AC -->|"Profile change"| UP["Update sent"]
UP --> AC
AC -->|"Unassign or user deactivated"| DE["Deprovisioned"]
DE -->|"Assign again"| PE
| State | Meaning | What to do |
|---|---|---|
| Not assigned | The person has no link to the app | Nothing, unless they should have access |
| Pending | Okta is creating or has queued the account | Wait a short time, then check for errors |
| Active | The account exists and works | Nothing, this is the healthy state |
| Error | A create or update failed | Read the reason, fix it, then retry |
| Deprovisioned | The account was switched off by Okta | Reassign to bring it back, if intended |
Reading a stuck account
A person who sits in the pending or error state for a long time needs attention. Open the app user record, read the last message, and look for a pattern. If one account is stuck, the cause is usually specific to that person, such as a duplicate username. If many accounts are stuck at once, the cause is usually shared, such as an expired credential or an app outage.
A parcel tracking page shows stages: ordered, packed, shipped, delivered or failed. A parcel stuck at “packed” for days tells the warehouse to look at that parcel. The app user statuses give administrators the same kind of tracking view for each account.
15Setting Up Provisioning Step by Step
Here is a complete route from an app with no provisioning to one where create, update and deactivate all run on their own. Labels differ slightly between apps.
Confirm the app supports it
Read the app’s documentation, and Okta’s integration page for it. Note which of create, update, deactivate and group push are supported.
Prepare the app side
Create a dedicated service account or token in the app with only the rights needed to manage users. Never use a personal administrator login.
Add the app in Okta
Add the app integration, and set up single sign-on first, so people can sign in before accounts appear.
Enable the integration
Open the Provisioning tab, choose to configure the integration, and enter the app’s address and credential. Test the connection.
Choose the actions
Switch on Create Users, Update User Attributes and Deactivate Users. Add Sync Password only if you truly need it.
Review the mappings
Open the attribute mappings. Remove facts you do not need, set username to create-only, and make the default role the lowest.
Test with one person
Assign a test user. Confirm the account appears with the right details. Change a fact and watch the update. Unassign and watch the deactivation.
Handle existing accounts
Align usernames, then import and match existing users before assigning broad groups.
Assign in waves
Assign a small group first, then larger ones, checking the System Log and the tasks page after each wave.
Document and monitor
Write down the settings, the owner and the review dates, and set up alerts for failures.
Always test the three actions in order on a test user: create, update, deactivate. A setup that creates well but cannot deactivate looks fine on day one and becomes a security problem months later.
Starting provisioning is like opening a new branch office. You first confirm the branch can receive orders, give it a dedicated key and not the manager’s personal key, send a few test orders of each kind, bring over the old customer cards, and only then start sending the whole customer list.
16The Other Direction: Importing from the App
Provisioning is not only pushing. Sometimes Okta must also listen, to learn about accounts that already exist in an app.
The “to Okta” direction brings information from the app into Okta. It has two main uses. The first is the user import, a one-time or scheduled read of all users in the app, used to find and match existing accounts. The second is profile updates from the app, in which certain facts that the app owns flow back into Okta’s profile.
How an import works
- Okta asks the app for its list of users. The connector reads the list in pages, so it can handle large apps.
- Okta tries to match each app user to an Okta user. Matching rules compare fields, such as username or email.
- Okta shows the result for confirmation. Clear matches are listed, unmatched users are shown, and conflicts are flagged.
- An administrator confirms. Confirmed matches become linked app users that Okta now manages.
When to use it
Use a first import whenever you move an app that already has users under Okta’s control. Use scheduled imports only for facts that the app truly owns. For most companies, Okta is the master of identity, so imports are mainly a clean-up tool at the start, and not a daily process.
Letting imports confirm and create Okta users automatically from an app is powerful, and risky. A messy or abused app list can flood Okta with unwanted users. Keep confirmation manual until you trust the data.
Before a head office takes over a branch, it asks the branch for its customer list and compares it with the head office list. It then reports which customers are recognized, which are new and which look wrong. Only after that review does the head office start managing the branch’s cards.
17Choosing the Right Method for Each App
Not every app supports the same thing. A short decision path helps you choose a method without guessing.
flowchart TD
A["App needs automatic accounts"] --> B{"Does Okta have a ready connector for it?"}
B -->|"Yes"| C["Use the connector and map attributes"]
B -->|"No"| D{"Does the app support SCIM?"}
D -->|"Yes"| E["Use a generic SCIM connection"]
D -->|"No"| F{"Does the app have any web interface for users?"}
F -->|"Yes"| G["Build a workflow or custom integration"]
F -->|"No"| H{"Does it support just-in-time creation at login?"}
H -->|"Yes"| I["Use just-in-time and add a review for leavers"]
H -->|"No"| J["Manual process with a documented checklist"]
Reading the path
The path runs from the strongest, most automatic option to the weakest. A ready connector is the best, since it already knows the app’s rules. A generic SCIM connection is next. A custom workflow works when the app has some interface but not a standard one. Just-in-time creation is a partial answer that handles creation only. A manual checklist is the last resort, and it needs an owner who runs it on every joiner, mover and leaver.
| Method | Create | Update | Deactivate | Effort to set up |
|---|---|---|---|---|
| Ready connector | Yes | Yes | Yes | Low |
| Generic SCIM | Yes | Yes | Yes | Medium |
| Custom workflow | Yes | Yes | Yes | High |
| Just-in-time | Yes | Sometimes | No | Low |
| Manual checklist | By hand | By hand | By hand | Low, but costly forever |
Choosing a method is like choosing how to deliver parcels. A ready courier contract is the easiest. A standard shipping form works almost anywhere. A custom van route is possible but costs effort. Leaving parcels at the door and hoping, the just-in-time style, handles only arrivals. Carrying each parcel by hand is always possible and always slow.
18Data Flow, Timing, Retries and Limits
Provisioning is not instant magic. It is a queue of small jobs, sent to apps that have their own speed limits and moods.
Queues and order
When many people change at once, Okta places the work into a queue and sends jobs to each app at a measured pace. Jobs for the same person are kept in order, so that a create happens before an update. Jobs for different people may run in parallel. In normal conditions, a single change reaches the app in seconds. After a large change, such as assigning a big group, the queue may take minutes or hours to clear.
Rate limits
Most apps limit how many requests they accept in a given time, to protect themselves from overload. When Okta sends too many, the app replies “slow down”, and Okta waits and tries again. This is normal during large rollouts and is the main reason for staged assignment. A huge wave of assignments does not fail, but it can be slow and can use up the app’s allowance, which might block other tools that use the same quota.
Retries and idempotence
If a request fails for a temporary reason, such as a network blip, Okta retries it after a delay. A well-built connector is careful that repeating a request does not cause harm: creating the same user twice should not make two accounts. That safety is called idempotence. It is the reason Okta checks for an existing user before it creates one.
Typical response codes
| App reply | Plain meaning | Usual cause | Fix |
|---|---|---|---|
| Unauthorized | The credential was refused | Expired or revoked token | Create a new credential and update Okta |
| Forbidden | The credential lacks the right | The service account is too limited | Grant only the missing right |
| Not found | The user or address does not exist | The account was removed in the app, or the address is wrong | Reconcile the record, or correct the base address |
| Conflict | The user already exists | Username taken by another account | Link the existing account, or change the username |
| Bad request | The data was not acceptable | A required fact is missing or malformed | Fix the mapping or the profile value |
| Too many requests | The app asks Okta to slow down | A large wave of changes | Wait, or stage the rollout |
| Server error | The app had a problem | An outage or a bug at the app | Wait and retry, then contact the vendor |
Think of a factory loading dock with one door. Trucks queue up, the dock handles a fixed number per hour, and a truck that arrives at the wrong moment waits and tries again. A big delivery needs spreading across the day. Provisioning to an app behaves the same way.
19Security of Provisioning
Provisioning holds the keys to every app’s user list. If that power is misused or stolen, an attacker can create accounts, change roles or lock people out. This chapter shows how to protect it.
Think about what provisioning can do. It can create accounts, write profile facts, set roles and switch accounts off, all without any person clicking inside the app. That is exactly what makes it useful, and exactly what makes it a target. The connection between Okta and each app is therefore a high-value path and deserves the same care as an administrator login.
The main risks
Stolen provisioning credential
An API token or secret for the app leaks. An attacker can then create admin accounts directly in the app, bypassing Okta completely.
Over-powerful service account
The credential can do far more than manage users, so a single leak exposes data and settings as well.
Unsafe mappings
A fact that people can edit themselves is mapped into a role, so users can give themselves more access.
Leavers left active
Deactivation is off, fails silently or is ignored, so former staff keep working accounts.
Rogue changes in Okta
Someone with Okta administrator rights changes assignments or mappings to grant access to themselves or a friend.
Orphan accounts
Accounts created directly in the app, outside Okta, are never touched by provisioning and are never removed.
The protections
- Least privilege for the service account. Give the token only the rights needed to create, read, update and deactivate users. Do not use a personal super-admin login, which would also break when that person leaves.
- Secure storage and rotation. Keep secrets only where Okta stores them. Rotate on a schedule, and immediately after any suspicion or after an administrator leaves.
- Restrict where the credential works. If the app allows it, limit the token to Okta’s network addresses.
- Small, named owners. Each app integration has a named owner who reviews settings on a schedule.
- Protect Okta administrators. Require strong sign-in for anyone who can change assignments or mappings, and give each person only the administrator role they need.
- Review mappings for risk. Make sure no self-editable fact decides a role.
- Hunt for orphans. Regularly compare the app’s user list against Okta’s, and handle accounts that Okta does not know about.
- Alert on sensitive events. Raise alerts when a provisioning credential changes, a mapping changes, or an admin role is assigned.
flowchart LR
ADM["Okta administrator"] -->|"changes assignments and mappings"| OK["Okta provisioning engine"]
OK -->|"uses stored credential"| APP["Application user store"]
ATT["Attacker"] -.->|"steals credential"| APP
ATT -.->|"phishes an administrator"| ADM
OK --> LOG["System Log and alerts"]
APP --> AUD["App audit trail"]
LOG --> SEC["Security team review"]
AUD --> SEC
Reading the picture
The solid lines show the normal flow: an administrator changes settings, Okta uses its stored credential, and the app’s user store changes. The dotted lines show where attackers aim. One goes straight to the app using a stolen credential. The other goes through an administrator, using phishing. Both leave traces in the logs, which is why the log arrows to the security team matter as much as the prevention.
Prevention is never perfect. Plan for detection too: a regular check that compares the people who should have access with the accounts that actually exist will catch what protections miss.
Provisioning is like the locksmith who cuts and cancels keys for every door in a building. The locksmith’s tools need a locked cabinet, the shop needs a good lock, and the log of every key cut must be checked. A stolen locksmith’s toolkit is far worse than one stolen key.
20Monitoring, Logging and Troubleshooting
Provisioning runs quietly in the background, so you need ways to see what it did and to find out quickly when it did not work.
Where to look
| Place | What it shows | Best used for |
|---|---|---|
| System Log | Every provisioning event with time, actor, target and result | Finding exactly what happened to one person |
| Tasks page | Failed or pending actions that need a person | Daily clean-up of errors |
| App user record | The status and last message for one person in one app | Checking a single account |
| Provisioning tab | The connection test, switches and mappings | Checking configuration |
| App audit trail | What the app itself recorded | Confirming the app really changed |
| Reports and alerts | Summaries and notifications | Spotting trends and early warnings |
A calm way to troubleshoot
Name the symptom exactly
Which person, which app, which action: create, update or deactivate? One account or many?
Check the assignment
Is the person actually assigned, directly or through a group? Is the group rule placing them correctly?
Check the switch
Is the matching action switched on in the Provisioning tab?
Read the log
Find the event for that person. Read the result and the reason, which often names the exact problem.
Test the connection
If many accounts fail, test the connection. An expired credential is a very common cause.
Check the data
Look for missing required facts, duplicate usernames and values the app will not accept.
Fix, retry, confirm
Make one change, retry the task, and confirm in the app that the account is right.
Common problems and their usual causes
Nothing is created
Create Users is off, the person is not assigned, or the connection is broken.
Duplicate accounts
Existing accounts were never matched, or usernames differ in format.
Values will not update
Update is off, the mapping is create-only, or another system overwrites the value.
Leavers still active
Deactivate is off, the action failed, or the account was never linked to Okta.
Many errors at once
Expired credential, an app outage or a rate limit during a large wave.
Wrong role
The mapping gives a default role, and nobody adjusted it in the app or in the mapping.
Make “check the tasks page” a daily habit for one named person. Small problems that are cleared daily never grow into a crowd of stuck accounts.
Troubleshooting is like finding why a parcel did not arrive. First you confirm the order was placed, then check the shipping label, then read the tracking history, and only then call the courier. Jumping to the courier first usually wastes time when the label was simply wrong.
Joiner, mover and leaver as a daily routine
Every provisioning decision fits one of three moments in a person’s working life. A joiner is someone new, who needs working accounts on the first morning. A mover is someone who changes team, title or place, who needs some accounts added, some changed and some removed. A leaver is someone who departs, who needs every account switched off promptly. Teams that design for all three moments, and not only for joiners, avoid the most common gap: a company that is excellent at welcoming people and poor at closing the door behind them.
Movers deserve special attention because they are the quiet source of excess access. A person who changes teams three times without losing old access ends up with the combined rights of every team they ever joined. Rule-driven groups fix this automatically, since leaving a group removes what the group granted. Without them, someone must remember to clean up, and people rarely remember.
Questions to ask before you switch provisioning on
- Who owns the app? A named person must be able to say who should have access and in which role.
- What is the source of truth? Decide whether HR, a directory or Okta itself holds the correct facts.
- What happens to data when an account is closed? Agree whether files are transferred, kept or deleted, and who does it.
- How will we know it failed? Choose who watches tasks, and which alerts reach them.
- How do we undo it? Know how to stop provisioning, or restore a wrongly deactivated account, before it is needed.
Answering these questions takes an hour and prevents weeks of confusion. They also create the short document that auditors will ask for later, saying who approved access to the app, why, and how it is reviewed.
21Advantages, Disadvantages and Trade-offs
Provisioning is very valuable, but it is not free. A fair view lists both sides.
Advantages
- New staff are productive on day one.
- Leavers lose access quickly and consistently.
- Profile facts stay correct in every app.
- Admin and help desk work shrinks.
- Audits become easier, with one record of who had what.
- Licenses are reclaimed, saving money.
- Roles are consistent, which reduces mistakes.
Disadvantages
- Setup takes planning, testing and clean data.
- Not every app supports it, or supports all three actions.
- A mistake in a mapping spreads to many apps quickly.
- The credentials are a high-value target.
- Paid plans or licenses may be needed in some apps.
- Troubleshooting needs knowledge of both Okta and the app.
- Timing is not always instant.
Trade-offs to decide on purpose
Choice: Deactivate immediately, delete later after a retention period.
Why: Deactivation is reversible and keeps data for handover and audits. Deleting at once removes the safety net.
Cost: Some licenses stay used, and a clean-up process is needed.
Choice: Okta is the master of identity facts. Apps own only the facts that exist nowhere else.
Why: One master per fact prevents tug-of-war updates.
Cost: Teams must change facts in Okta or HR, not in each app.
Choice: Staged waves with checks between them.
Why: Problems show up on a small group, before they reach everyone, and rate limits are respected.
Cost: The full rollout takes longer.
An automatic door saves effort for everyone who walks through, but it needs installation, power and maintenance, and a fault affects every visitor. Provisioning is the same trade: large, steady benefits for an upfront investment and a duty to keep it healthy.
22Patterns, Anti-patterns and Best Practices
Teams that run provisioning well tend to repeat the same habits. Teams that struggle tend to repeat the same mistakes.
Good patterns
Group-based assignment
Assign apps to groups driven by rules, never to individuals, so access follows the profile.
One source of truth
HR feeds Okta, and Okta feeds the apps. Facts flow in one direction.
Lowest default role
New accounts start with minimum rights. More rights are requested and approved.
Test user before rollout
Every setup is proved on a test user for create, update and deactivate.
Staged waves
Small groups first, checks between waves, and the full rollout last.
Regular reconciliation
A periodic comparison of Okta against each app catches orphans and drift.
Anti-patterns to avoid
Personal admin credential
It breaks when the person leaves, and it carries too much power.
Deactivate switched off
Creating accounts without removing them builds a growing risk.
Two masters for one fact
The value flips back and forth, and nobody trusts either system.
Everyone in the admin role
A broad default role makes every compromise serious.
Big-bang assignment
Assigning thousands at once hides problems and floods rate limits.
Ignoring the tasks page
Errors pile up until a leaver or a new hire is affected.
A short checklist
- Does each provisioned app have a named owner and a documented setup?
- Are Create, Update and Deactivate all tested and switched on?
- Is the service account limited to user management?
- Is every field mapped in only one direction?
- Do group rules, not people, decide assignments?
- Is someone reading the tasks page daily?
- Is there a regular check for orphan accounts?
Good habits in a kitchen are small and boring: label the food, wipe the counter, check the fridge. Provisioning habits are the same. None is exciting, but together they stop the problems that turn into emergencies.
23Performance, Scale and Availability
A company of fifty people and a company of fifty thousand both need provisioning, but the second needs more care about volume and failure.
Scale: many people, many apps
The total work grows with the number of people times the number of apps. A company with ten thousand people and thirty apps may handle hundreds of thousands of accounts. Most of the time, changes arrive slowly and steadily, which is easy. The pressure comes in bursts: a merger, a yearly reorganization, a large hiring wave or a new app being rolled out to everyone.
- Use group rules. They scale because one rule decides thousands of assignments.
- Stage big changes. Spread large moves over hours or days, outside peak work times.
- Keep mappings lean. Fewer mapped fields mean smaller messages and fewer failure points.
- Know each app’s limits. Note the request rate allowed and plan large waves around it.
Availability: when something is down
Two systems must be healthy for a change to land: Okta and the app. If the app is down, Okta keeps the work waiting and retries, and the account appears when the app returns. If the app is down for long, tasks may show errors, and an administrator can retry them afterwards. The main danger is not the delay but the missed deactivation, so after an outage check that leavers were switched off.
sequenceDiagram
participant H as HR System
participant O as Okta
participant A as Application
H->>O: Bulk change for many people
O->>O: Queue jobs per app and per person
O->>A: Send first batch
A-->>O: Too many requests, slow down
O->>O: Wait and keep jobs in order
O->>A: Send next batch slowly
A-->>O: Accepted
O->>O: Record results and list failures as tasks
Reading the picture
The HR system sends one large change. Okta does not push it all at once. It queues the work and sends a first batch. The app answers that it is too busy, so Okta waits and then sends the next batch more slowly. When the app accepts, the results are recorded, and any failures become tasks. The result is slower than a single instant push, but it is safe and complete.
A busy airport does not land every plane at once. Planes circle and land one after another at a pace the runway can handle. Okta behaves like the control tower for account changes: it keeps order and speed within what each app can handle.
24A Worked Example: Meet Priya
To make everything concrete, follow one fictional employee, Priya, through her whole time at a company called Northwind Retail.
Priya joins as a Sales Associate
HR records her hire. Okta creates her Okta user. A group rule places her in the Sales group. The Sales group is assigned to the email tool, the CRM and the chat app. Create runs for all three, and her accounts appear with the lowest role. She signs in and works.
Her name changes
Priya marries and updates her last name with HR. The change reaches Okta, and Update sends the new name to all three apps. Her email address changes too, and the apps follow. Her username stays the same, because it was set as create-only.
Promotion to Sales Manager
HR changes her title and level. A group rule adds her to the Managers group. The CRM now gives her the manager role through the group assignment, and she is added to the finance reporting tool. Update changes her title everywhere, and Create makes a new account in the reporting tool.
Transfer to Marketing
Her department changes. She leaves the Sales group, so the CRM account is deactivated, and she joins Marketing, so a design tool account is created. The mover process runs without any ticket.
Priya leaves the company
HR records her departure. Her Okta user is deactivated. Okta deactivates her accounts in every app. A manager reassigns her files first, because deactivation does not move work. Sessions expire, and the security team confirms the log shows all deactivations as successful.
What the company never had to do
In six years, nobody had to create or close an account by hand. The help desk received no ticket on her first day, no ticket about her new name and no ticket about her transfer. At her exit, there was no hurried list of apps to check, and no forgotten account remained. The work was done by rules written once and checked regularly.
Walk through a story like Priya’s when you design provisioning for a new app. For each stage ask: which action happens, which switch controls it and what could go wrong? This quickly shows gaps in the setup.
Lessons from the story
Priya’s story shows three habits that make provisioning work. First, every change started from a trusted record, HR, and not from a request to the help desk. Second, access followed group membership, so movement between teams was handled by removing and adding, and not by remembering. Third, deactivation was treated as seriously as creation, with a person confirming it in the log. If any of these three habits is missing, the story ends differently: a former employee with a live account, a long-time employee with rights from four old jobs, or a new starter waiting three days for a login.
Notice also what the company decided in advance. It decided that usernames never change, so that apps could always find Priya’s account. It decided that new accounts get the lowest role, so a mistake costs little. It decided that her files must be reassigned by a manager before deactivation, because the tool cannot guess who should inherit her work. Each decision is small, and each saves a painful discovery later.
25Real-World Examples
Different organizations use the same three actions in different ways. These short pictures show common situations.
A hospital group with shift staff
Nurses, doctors and administrators join and leave often, and some access is life-critical while some is highly private. The hospital drives accounts from the staff system. Clinical apps use groups tied to ward and role, and deactivation is tested hard, because a former employee seeing patient data is a serious breach. Reconciliation runs weekly.
A software company with many tools
Developers use code hosting, chat, ticketing, cloud consoles and monitoring. Group rules based on team assign these tools. Leavers are deactivated in all of them within minutes, and cloud admin rights are given only through a short, approved request, never by default.
A university with students and staff
Thousands of students arrive each term and leave each year. Accounts are created in bulk from the enrollment system, in staged waves before term starts. Staged assignment avoids overloading learning platforms. At graduation, access is reduced in steps, not cut off at once, as policy allows alumni some services.
A retailer with seasonal workers
Hundreds of temporary workers are hired for the holidays. Their accounts are created from the hiring list with a fixed end date, and deactivation is triggered when the contract ends. Without automation, many would keep access for months.
A company after a merger
Two companies join, each with its own apps and user lists. The team imports and matches existing accounts to Okta users, resolves duplicates, and then moves each app under provisioning one at a time. Nothing is assigned broadly until matching is clean.
A small business with a few apps
A twenty-person firm has email, chat and an accounting tool. They enable provisioning for email and chat, which support it, and use a short checklist for the accounting tool, which does not. Even this small step removes most of their leaver risk.
26Frequently Asked Questions
Short answers to the questions beginners ask most.
Single sign-on lets a person log in to an app with their Okta identity. Provisioning makes sure their account exists in the app, has correct details, and is switched off at the right time. You usually need both.
Not by default. With single sign-on, people do not need a separate app password. Some apps support password sync, but it is optional and should be used only when truly needed.
No. Deactivation switches the account off and keeps it. Deletion removes it. Okta’s normal leaver action is deactivation, which is reversible and keeps data for audits.
SCIM is a common language that apps and identity systems use to talk about users and groups. If an app speaks SCIM, Okta can connect to it with fewer custom steps.
Usually within seconds to a few minutes, but it depends on the app and on how much other work is queued. Large changes can take longer.
Import the existing users and match them to Okta users before assigning anyone broadly. Matching avoids duplicates and brings those accounts under Okta’s control.
They can if the app allows it, but provisioning may overwrite such edits when Okta is the master of that fact. Decide the master of each fact, and turn off editing in the app for those fields where possible.
The usual causes are a missing required fact, a username already used in the app, or a value the app refuses. The System Log and the task for that person normally state the reason.
Options include a custom workflow, just-in-time creation for arrivals, or a written manual checklist with an owner. Pair any partial method with a regular review of who still has access.
Typically the identity or IT security team owns the platform, while each app has a business owner who confirms who needs access and which roles are right. Both sides review it on a schedule.
It can, if updates are on and mappings overwrite existing values. Review the mappings and test with a small group first.
Check the tasks page daily, reconcile each app with Okta at least every few months for sensitive apps, and review credentials and mappings on a yearly cycle or after any incident.
27Summary and Key Takeaways
App provisioning keeps accounts in step with real people: created when they join, updated when they change and deactivated when they leave.
Okta does this by treating assignment as the trigger. When a person is assigned to an app, directly or through a group, Okta creates an account. When a mapped fact changes, Okta updates it. When the person is unassigned or their Okta user is deactivated, Okta switches the account off. The connection to the app is usually SCIM or a ready connector, with mappings that say which fact goes where. Good results depend on clean data, one master per fact, a safe low default role, careful credentials, staged rollouts and steady monitoring.
Key Takeaways
- Provisioning has three core actions: create, update and deactivate, and each has its own switch.
- Assignment, ideally through rule-driven groups, is what triggers the actions.
- Keep Deactivate Users switched on, and test it, because it protects you from leavers.
- Give each fact one master, and map it in one direction only.
- Protect the provisioning credential with least privilege, rotation and alerts.
- Roll out in staged waves, and read the tasks page and the System Log regularly.
- Match and link existing accounts before assigning broadly, to avoid duplicates.