Just-In-Time Provisioning (Basic) in Okta
A plain-English guide to how accounts get created automatically at a person's first login: what it is, how Okta takes part, how to set it up, how to keep it safe, and where it falls short.
Picture the first day at a new job. You walk in, sit at a desk, open your laptop, and click a tile for the team chat app. A moment later you are inside, with your name already shown at the top of the screen. Nobody emailed you a password and nobody filed a ticket to create your chat account. The account simply appeared at the exact moment you needed it. That small piece of magic has a name: Just-In-Time provisioning, usually shortened to JIT.
Okta is an identity service, and it takes part in JIT in two different ways. Sometimes Okta tells an app who you are, and the app builds your account on the spot. Other times Okta is the one receiving a login from a partner or a company directory, and Okta builds your account on the spot. This guide explains both, starting from zero. Every new word is explained the first time it appears, and each big idea comes with an everyday comparison. By the end you will know what JIT is, how the basic setup works, what can go wrong, and when you should choose something else.
1What Is Provisioning and Why Does It Matter?
Before we talk about doing it “just in time”, we need to understand the job itself: getting an account to exist in the right place.
An account is a record
Almost every app keeps a list of people it knows about. Each entry in that list is called an account. An account usually holds a name, an email address, a role, and some settings. When you open an app, it looks you up in its list. If you are not there, you are turned away, even if you work at the company and have the right password somewhere else.
Provisioning means creating, updating and, at the end, removing those accounts. The word comes from “provide”. The company provides each person with what they need to do their work. The opposite word is deprovisioning, which means taking access away when a person leaves or changes jobs.
Why it becomes a headache
A small team of ten people can create accounts by hand. A company with ten thousand people and eighty apps cannot. Every new hire needs accounts in many places, every role change needs updates in many places, and every departure needs removals in many places. Mistakes are easy to make. A forgotten account for a former employee is a real security risk, and a missing account for a new hire wastes the first morning of a paid worker.
Think of a big office building. Provisioning is the work of printing a badge for each person and adding their name to the guest list at each door. Doing this by hand for every door, for every person, every time someone joins or leaves, is exhausting. Companies look for ways to make the badge and the guest list appear automatically.
Provisioning and signing in are two different jobs. Signing in answers “who are you?”. Provisioning answers “does this app have an account for you, and is it correct?”. JIT is clever because it ties the two together at one moment.
2What Is Just-In-Time Provisioning?
JIT means an account is created only when the person first tries to use the app, not before.
The phrase “just in time” comes from manufacturing. A car factory does not store thousands of tires for months. It receives tires at the moment the assembly line needs them. JIT provisioning applies the same idea to accounts. Instead of building an account for every person in advance, the system builds it at the exact moment of the first login.
Here is the basic idea in four steps. A person tries to sign in. A trusted identity system confirms who they are. It also sends a few facts about the person, such as name, email and department. The app sees that no account exists yet, so it uses those facts to create one right away and lets the person in.
What “Basic” means here
When people say “JIT provisioning (basic) in Okta”, they mean the simple, standard form of this feature. The basic form does three things. It creates the account at first login. It fills the account from a short list of attributes. It may refresh those attributes at later logins. The basic form does not include advanced extras such as bulk imports, scheduled syncs, or automatic removal of accounts. Those belong to other tools that we will compare later.
JIT is like walk-in registration at a clinic. You do not fill in forms weeks ahead. You arrive, show your identity card, and the front desk creates your patient file from the details on the card. The next visit finds the file waiting. Pre-provisioning, the opposite, is like having your file prepared before you ever walk in.
Where it came from
Early single sign-on systems proved identity but left account creation to people. As companies moved to cloud apps in the late 2000s and early 2010s, the number of apps per person exploded. Software vendors responded in two ways. Some let the app trust the identity message and create the account on first login. That is JIT. Others built a separate web service that an identity provider could call to create, change and delete accounts ahead of time. That second approach is the standard called SCIM. Okta, founded in 2009, supports both styles.
Three common myths
Myth one: JIT is a feature that Okta turns on by itself. In the usual SAML case, the switch lives inside the app, and Okta only supplies the facts. Without the app’s cooperation, nothing is created.
Myth two: JIT keeps accounts up to date forever. It only sees a person when they log in. A person who never returns is never refreshed, and a person who has left is never removed.
Myth three: JIT is less secure than other methods. The creation step is safe when the identity message is signed, the default role is low, and the right people are assigned. The real weakness is the missing removal step, which can be fixed with other tools.
JIT creates accounts at login. It is a one-way trick: it is excellent at “hello” and weak at “goodbye”. Keep that sentence in mind, because it explains most of the trade-offs later in this guide.
3JIT Compared with Other Ways to Create Accounts
JIT is only one of several ways to get accounts into place. Seeing them side by side shows when each one shines.
| Method | When is the account made? | Removal handled? | Best for |
|---|---|---|---|
| Manual creation | When an admin does it | Only if the admin remembers | Tiny teams, one-off apps |
| Bulk import file | When someone uploads a list | No | One-time migrations |
| Just-In-Time (JIT) | At the person’s first login | No, accounts stay behind | Simple apps, fast rollout |
| SCIM provisioning | Ahead of time, when assigned in Okta | Yes, accounts can be disabled or deleted | Apps that need full lifecycle control |
| Directory sync | On a schedule, from another directory | Usually yes | Large organizations with a master directory |
Reading the table in plain words
Manual creation is simple but slow. Bulk import is fast once but quickly becomes out of date. JIT is quick and needs little setup, but it only handles the arrival. SCIM handles the whole life of an account, which is why it is the favorite for important systems. Directory sync is a bridge between two lists of people.
You want a quick start
The app supports it, the account holds little data, and a short delay in removing leavers is acceptable.
You need strong control
The app holds sensitive data, costs money per account, or must remove access the moment someone leaves.
You want the best of each
SCIM can keep accounts tidy while JIT acts as a safety net for the odd person who logs in before their account is synced.
The app charges per seat
Automatic creation can quietly add paid accounts for people who were never meant to have one.
Think of how a hotel handles guests. JIT is the walk-in guest who gets a room key at the desk when they show up. SCIM is the booking system that reserves rooms before arrival and also cancels them if plans change. A hotel that only did walk-ins would never know which rooms to clean after guests leave.
4Core Vocabulary You Must Know
A dozen small words carry most of the meaning in this topic. Learn them once and the rest reads easily.
Identity Provider (IdP)
The system that knows who people are and vouches for them. Okta usually plays this part. Think of it as the passport office.
Service Provider (SP)
The app or system that relies on the IdP to confirm identity. The app that creates the account in JIT is the service provider.
Assertion
A signed statement from the IdP about a person. In JIT it carries the facts used to build the new account.
Attribute
One piece of information about a person, such as first name, last name, email or department. Attributes are the raw material of JIT.
Attribute Mapping
The rules that connect a field in one system to a field in another, such as sending the Okta field for work email to the app field named email.
Name ID
The main identifier in the assertion, often an email address. The app uses it to decide whether an account already exists.
Universal Directory
Okta’s central list of people and their profile details. It is the source for most of the attributes Okta sends out.
SCIM
A standard way for an identity system to create, update and remove accounts in an app ahead of time. It is the main alternative to JIT.
Account Linking
Connecting an incoming login to an account that already exists, so that the person does not end up with two accounts.
Group
A named collection of people. Groups carry role information and decide which apps a person may open.
Inbound Federation
The case where Okta receives logins from an outside identity provider, such as a partner company, and treats it as a trusted source of identity.
Deprovisioning Gap
The time between a person leaving and their account in an app actually being turned off. JIT does nothing to close this gap.
Imagine a conference registration desk. The attendee shows a passport (the IdP’s assertion). The desk reads the name and company printed on it (the attributes) and writes them onto a new badge (the account). A clipboard rule says “company goes in the second line” (the mapping). If the same name is already on the list, the desk reuses that badge instead of printing a second one (account linking).
5Architecture and Components
A JIT login touches the person, their browser, Okta, and the app that receives them. Each piece has a clear job.
JIT is not a separate product with its own box on the diagram. It is a behavior that appears when an identity message arrives at a system that is willing to create accounts. That means two sides must agree: the sender must include enough facts, and the receiver must be switched on to build accounts from them.
flowchart LR
U["Person"] --> B["Web Browser"]
B --> OK["Okta Sign-in"]
subgraph TEN ["Okta Tenant"]
OK --> POL["Authentication Policy and MFA"]
POL --> UD["Universal Directory Profile"]
UD --> MAP["Attribute Mapping"]
MAP --> AI["SAML App Integration"]
end
AI --> AS["Signed Assertion with Attributes"]
AS --> APP["Application"]
APP --> CHK{"Account exists?"}
CHK -->|"No"| NEW["Create account from attributes"]
CHK -->|"Yes"| UPD["Open existing account"]
The parts, one by one
The person and the browser. The person starts the journey, and the browser carries messages between Okta and the app. The app and Okta rarely speak to each other directly during a login.
Okta sign-in and policy. Okta checks who the person is and applies rules such as multi-factor authentication. Only after these pass will Okta prepare an assertion.
Universal Directory. This holds the person’s profile. The facts that end up in the new account start here, so their quality matters. A typo in the directory becomes a typo in every JIT-created account.
Attribute mapping. The app integration contains a short list of rules saying which directory fields are sent and what names they carry. The names must match what the app expects, character for character.
The SAML app integration. This is the object an administrator creates for each app. It holds the addresses, the identifier format, and the attribute rules. It is the file Okta keeps on how to talk to that one app.
The application. The app receives the assertion, checks the signature, and then decides whether to build an account. This final decision belongs to the app, not to Okta, which is why JIT works only with apps that offer it.
Okta cannot force an app to create accounts. If the app’s own JIT setting is switched off, a person without an account is simply refused, no matter how perfect the Okta side is. Always check the app’s settings first.
Okta is the airline that prints a boarding pass with your name and seat. The app is the airport lounge. The boarding pass carries your details, but the lounge decides whether to add you to its guest book when you walk in. A lounge with a closed guest book turns you away, however good your pass is.
6How JIT Works Internally, Step by Step
Follow one new employee through their very first login to a chat app that supports JIT.
sequenceDiagram
participant U as New Employee Browser
participant A as Chat Application
participant O as Okta
U->>A: Open the app for the first time
A-->>U: Redirect to Okta for sign-in
U->>O: Arrive with the app request
O-->>U: Ask for password and extra factor
U->>O: Prove identity
O->>O: Check assignment and read profile attributes
O-->>U: Return signed assertion with name, email and role
U->>A: Deliver the assertion
A->>A: Verify signature and look for an account
A->>A: No account found so create one from the attributes
A-->>U: Start a session and show the workspace
The person opens the app
They click the tile on the Okta dashboard or open the app’s own address. The app notices there is no active session.
Okta proves who they are
If they are not already signed in to Okta, they enter a password and may approve a second factor. Okta also confirms the person is assigned to this app.
Okta prepares the facts
It reads the profile in Universal Directory and fills each mapped attribute. It also adds the main identifier, the Name ID.
Okta signs and sends
The assertion is signed and handed to the browser, which delivers it to the app’s login address.
The app verifies
It checks the signature, the intended audience and the time window. Only a trusted, fresh assertion moves on.
The app looks for an account
It searches its own list using the Name ID, usually the email address. Two outcomes are possible: found, or not found.
Not found: create it
If JIT is enabled, the app builds a new account from the attributes and applies a default role, or a role chosen from a group attribute.
Found: reuse, and maybe refresh
If the account exists, the app opens it. Many apps also update its name or role from the new attributes, which keeps details current.
The session starts
The person lands in the app. From their point of view, nothing special happened. That smoothness is the whole point.
This is the conference desk again. The attendee hands over a passport. The desk checks the stamp, looks up the name on the list, and, finding nothing, prints a fresh badge from the passport details. On the second day the badge is already waiting, and the desk only needs to glance at the passport.
7The Two Directions of JIT in Okta
Okta can be the sender of identity or the receiver of identity. JIT appears in both roles, and beginners often mix them up.
Direction one: Okta sends, the app creates
This is the case in Chapters 5 and 6. A person signs in to Okta, and Okta sends an assertion to a business app. The app creates the account. Here, Okta’s job is to send good attributes. The creation itself happens in the app, and its availability depends on the app. Several well-known business apps, including Salesforce and Zoom, offer a JIT setting for SAML logins, but each names and handles it a little differently.
Direction two: Okta receives, Okta creates
Now reverse the roles. Sometimes people sign in to Okta using an outside identity system: a partner company, a parent company’s directory, or a social identity. Okta then acts as the service provider and treats the outside system as the identity provider. This setup is called inbound federation, and in the Okta admin screens the outside system is added under the identity providers area. When a person arrives from that outside system and has no Okta account yet, Okta can create one on the spot. That is Okta’s own JIT provisioning.
flowchart LR
P["Partner employee"] --> X["External Identity Provider"]
X --> A["Signed assertion"]
A --> OK["Okta as service provider"]
OK --> Q{"Matching Okta user?"}
Q -->|"Yes"| L["Link and sign in"]
Q -->|"No"| J["JIT: create Okta user"]
J --> G["Assign groups from rules"]
G --> D["Okta dashboard and apps"]
L --> D
| Question | Direction one | Direction two |
|---|---|---|
| Who is the identity provider? | Okta | An outside system |
| Who creates the account? | The business app | Okta |
| Where is JIT switched on? | In the app’s own SSO settings | In the identity provider settings inside Okta |
| Typical example | Employee opens a team chat tool | Contractor from a partner company opens the Okta dashboard |
| Main risk | Accounts for people who should not have them in the app | Accounts in Okta for people from an outside system |
Direction one is you showing a passport at a hotel desk, and the hotel creating its guest record. Direction two is a foreign visitor arriving at the passport office of your own country with a document from another government. The office decides whether to open a local file for them. Same idea, different seat at the desk.
Always ask first: “who is creating the account?” That one question tells you where to look for settings, where to look for errors, and who owns the fix.
8Setting Up Basic JIT for a SAML App
This is the common case: Okta sends an assertion, and the app builds the account. Screen labels vary by app and by Okta version.
Read what the app needs
Open the app’s SSO documentation and find two lists. The first says whether it supports JIT. The second names the attributes it needs to build an account, such as email, first name, last name and role.
Create the SAML app integration in Okta
In the Okta Admin Console choose Applications, then Create App Integration, then SAML 2.0. Fill in the single sign-on address and the audience name that the app gave you.
Choose the identifier
Pick the Name ID format and the Application username. Make sure the value matches what the app uses to look up people, usually the work email.
Add attribute statements
Create one entry for each fact the app needs. The name on the left must match the app’s field name exactly. The value on the right is the Okta profile field that supplies it.
Add group statements if roles are needed
If the app picks a role from group names, add a group attribute statement with a filter that sends only the relevant groups.
Assign groups
Open the Assignments tab and assign the groups of people who should be able to open the app. People who are not assigned never reach the app, so they never trigger account creation.
Switch on JIT inside the app
In the app’s own SSO page, turn on its automatic account creation option. Set the default role to the lowest level, not an administrator.
Test with a brand-new test user
Create a test person in Okta who has no account in the app. Sign in as that person and confirm that the account appears with the right name, email and role.
What a good attribute list looks like
| App field | Okta source | Why it matters |
|---|---|---|
| Primary email in the profile | Usually the key used to find an existing account | |
| First name | First name in the profile | Shown in the app’s interface and in mentions |
| Last name | Last name in the profile | Used for search and display |
| Department | Department in the profile | Sometimes used to place people in teams |
| Role or groups | Group membership | Decides what the new account may do |
If a required attribute is missing or empty, the app may refuse to create the account, or it may create a broken one. Before you roll out, scan the directory for people with blank names or emails.
Setting this up is like preparing a registration form and the desk that reads it. The form (the Okta attributes) must use the same field names as the desk’s computer screen, and the desk must be told it is allowed to create new files. If either side is missing, the new visitor stands at the counter and nothing happens.
9Setting Up Basic JIT When Okta Receives the Login
When an outside identity provider sends people to Okta, the identity provider settings inside Okta decide whether accounts are created.
In the Admin Console, outside identity providers live in the identity providers area. An administrator adds a SAML identity provider by giving Okta the outside system’s sign-in address, its unique name, and its certificate. After that comes a group of settings that control JIT. The names differ a little between Okta versions, but the ideas are the same.
| Setting idea | What it controls | Beginner advice |
|---|---|---|
| Username for the outside user | Which value from the assertion becomes the Okta username | Choose the work email so that people are easy to recognize |
| Match against | Which Okta field is used to look for an existing person | Match on email or username, whichever is unique in your org |
| Account linking | Whether an incoming login is tied to an existing Okta user | Turn on linking to avoid duplicates, with limits on who can be linked |
| Create new users (JIT) | Whether Okta builds a user when no match exists | Turn on only for trusted identity providers |
| Update existing users | Whether profile details are refreshed at each login | Decide who is the master of the profile before enabling |
| Group assignments | Which groups a new or returning user is placed in | Assign a small default group, not a powerful one |
Choosing who is the master
A person’s profile can only have one boss. If the outside system is the master, Okta overwrites its copy of name and email each time the person signs in. If Okta is the master, it keeps its own values. Mixing the two leads to fights where each side keeps changing the value back. Decide once, write it down, and apply it to all identity providers of the same kind.
Routing people to the right door
Okta can look at the email domain the person types and send them to the matching outside identity provider. This is done with routing rules. For example, anyone who types an address ending in a partner’s domain is sent to the partner’s sign-in page. Without these rules, people may be confused about where to sign in.
A large company often invites contractor firms to use its internal tools. Each firm keeps its own staff list. The company adds each firm’s identity system to Okta, switches on JIT, and places new contractors into a low-access group. When a contract ends, the firm removes the person from its own system, and they can no longer sign in at all.
This is like a gated office park that accepts visitor passes issued by friendly neighboring companies. The security desk opens a temporary file for each visitor from the neighbor’s pass. The rules at the desk say which neighbors are trusted, how the visitor’s name is written, and which areas a new visitor may enter.
10Attributes, Roles and Group Mapping
What goes into a new account decides what the person can do. The attributes are the real power behind JIT.
Required and optional facts
Every app has a short list of facts it must have to create an account. Usually that means a name and an email. It may also want a department, a phone number or a manager. Okta lets you add optional attributes, but a shorter list is better. Each extra field is one more place for a typo or a privacy problem.
Choosing a role at creation time
Apps need to know what a new person may do. There are three common ways to decide:
- A fixed default. Every JIT-created account gets the same basic role. This is the safest choice because it never gives extra rights by accident.
- A role attribute. Okta sends a field called role, and the app maps its values to internal roles.
- Group names. Okta sends the names of the person’s groups, and the app turns matching names into roles.
Example: three roles in a project tool
A project tool has three roles: viewer, editor and admin. The company creates three Okta groups with matching names. The Okta app integration sends those group names in the assertion. The first time a person logs in, the tool creates the account with the highest matching role. Most people land in viewer or editor, and only a small admin group reaches admin.
Keeping attribute names tidy
Many bugs come from small differences such as “firstName” versus “first_name” or “Email” versus “email”. Agree on one naming habit for your company, and copy the exact spelling from each app’s documentation. Capital letters matter.
Never let a person-controlled field decide an administrator role. If people can edit their own profile and that profile field feeds the role, someone could simply give themselves admin rights. Roles should come from groups that only administrators can change.
Think of a conference badge with a colored ribbon. The desk prints the ribbon from the registration list, never from what the attendee writes on a sticky note. If the badge color came from a note the attendee wrote themselves, everyone would pick the VIP color.
11Account Linking and Duplicate Accounts
The most common JIT surprise is the double: two accounts for the same person. Understanding why it happens makes it easy to prevent.
When an assertion arrives, the app or Okta must decide whether the person already has an account. It does this by comparing one value, usually an email or a username. If that value is spelled differently, the comparison fails, the system thinks the person is new, and JIT happily creates a second account.
Why the match fails
- The email in Okta is “sam.lee@example.com” but the old app account used “samlee@example.com”.
- The person changed their name after marriage and Okta now has a new email.
- The app compares capital letters strictly, while Okta lower-cases them.
- An older account was created with a personal email before the company adopted SSO.
How to prevent and fix it
Before turning on JIT for an app that already has users, export its user list and compare it with the Okta list. Fix mismatches first. Pick one stable identifier and use it everywhere. When duplicates do appear, merge or remove them following the app’s own rules, because the data inside each account, such as messages or files, may need to be moved by hand.
flowchart TD
A["Assertion arrives"] --> B["Read the Name ID value"]
B --> C{"Exact match in the account list?"}
C -->|"Yes"| D["Open the existing account"]
C -->|"No"| E{"JIT switched on?"}
E -->|"Yes"| F["Create a new account"]
E -->|"No"| G["Refuse the login"]
F --> H["Risk: a duplicate if the value was spelled differently"]
A library desk looks up members by card number. If a returning member writes the number with one digit wrong, the desk concludes they are new and issues a second card. Months later, two cards exist, with two separate borrowing histories. The fix is to check the number carefully, before printing anything.
12Data Flow and Account Lifecycle
An account created by JIT has a whole life. Knowing its stages shows what JIT handles well, and what it leaves for someone else.
The person exists in Okta
They are created from an HR source or a directory sync and placed in groups. At this point no app account exists yet.
The tile appears
Because their group is assigned to the app, a tile appears on their dashboard. Nothing is created yet. This is the “just in time” part, since the app waits for the first click.
First login creates the account
The attributes in the first assertion become the account’s starting data.
Later logins may refresh it
If the app updates accounts from assertions, a changed name or role is applied at the next login. If it does not, the data stays as first written.
The person leaves or moves
Okta deactivates the user or removes them from the group. New logins stop working immediately.
The account lingers
The account inside the app is still there. It may keep an active session for hours or days, and it keeps counting toward a seat limit.
The deprovisioning gap
Step six is the weak point. JIT only listens when a person arrives. When they leave, nobody tells the app. The old account stays, and it may even be usable through another path, such as a saved password, an access token or a mobile app that never expires its session. This is why security teams do not rely on JIT alone for important systems.
Ways to close the gap
- Pair JIT with SCIM, so that Okta can disable the account when the person is unassigned.
- Keep app sessions short, so that old sessions end quickly.
- Run a regular review that compares each app’s account list with the list of people assigned in Okta.
- Use the app’s own tools to disable accounts that have not logged in for a long period.
JIT is a front door that opens easily for new arrivals but has no exit door that closes behind people who leave. A building like that needs another way to collect old badges, such as a monthly walk-through that checks every badge against the current staff list.
13Security Considerations
Creating accounts automatically is powerful, so it needs guard rails. Most JIT incidents come from trust that was too wide, not from broken technology.
Trust only what you must
When JIT is on, whoever controls the identity message controls who gets accounts. For direction one, that is Okta, and the app must check the signature on every assertion. For direction two, that is the outside identity provider, and Okta trusts its certificate. If that outside system is poorly secured, an attacker there could create accounts in your Okta. Only connect identity providers you trust, and review them like any other partner.
Limit what a new account can do
The principle of least privilege means giving people only the access they need. For JIT this means a basic default role, a small default group, and no automatic path to administrator rights. Higher rights should be granted later by a deliberate action.
Protect the assignment door
Account creation happens only for people who can reach the app. Control that by assigning apps to groups, restricting group membership to administrators, and using authentication policies such as multi-factor authentication. Those policies run before Okta issues any assertion, so a failed check means no account is ever created.
Think about attribute injection
An attacker may try to supply extra or changed attributes to gain a higher role. Defenses are simple: sign and verify assertions, never trust fields that users can edit, and let only Okta groups decide roles. For inbound federation, ignore group claims from the outside system unless you filter them to a known list.
Mind the domain
Allow JIT only for expected email domains. An identity provider that vouches for any address at all can lead to accounts for strangers. Use routing rules and match settings to keep each door for its own set of people.
Watch for abuse of seat limits
Some apps charge for each account. A wide group assignment combined with JIT can create hundreds of paid accounts in a day. Assign the app only to the people who need it.
Never combine JIT with a default administrator role. A single mistaken group assignment would then create administrators automatically.
A hotel that creates a guest record for anyone showing any passport needs three protections: a check that the passport is real, a limit on which floors a new guest may enter, and a limit on how many rooms one day’s check-ins may fill. JIT security is the same set of limits applied to accounts.
14Monitoring, Logging and Troubleshooting
When a JIT login fails, the person sees a blunt message. The real reason is nearly always findable in a few places.
Where to look
The Okta System Log. This records sign-in attempts, assignments, user creation and changes made by administrators. For direction two, user creation events show up here. For direction one, look for the single sign-on event for that person and app.
The app’s own logs. For direction one, the app decided whether to create the account, so its audit or sign-in log holds the reason for a refusal.
The assertion itself. A free browser extension for viewing SAML messages shows what attributes Okta really sent. Handle those captures with care, since they contain personal data.
Common symptoms and fixes
| Symptom | Usual cause | Fix |
|---|---|---|
| New person is told they have no account | JIT is switched off inside the app | Turn on the app’s automatic account creation |
| Account is created with a blank name | Attribute names do not match the app’s names | Copy the exact field names from the app documentation |
| Two accounts for one person | The identifier is spelled differently | Align the identifier and clean up the duplicate |
| Person lands with the wrong role | Group filter or role mapping is wrong | Adjust the group statement and the app’s role map |
| Okta shows the person is not assigned | Person or group is missing from Assignments | Assign the correct group |
| Okta does not create a user from an outside login | JIT is disabled on the identity provider, or the match is too strict | Enable creation and review the matching rules |
| Profile keeps flipping between two values | Both sides think they are the master | Choose one master for the profile |
What to watch over time
- Number of accounts created per day in each app. A sudden spike deserves a look.
- Accounts without a matching Okta user, which signals leavers who were never removed.
- Failed creation attempts, which usually point to a missing attribute.
- Administrator changes to JIT settings, which should be rare and reviewed.
First, who is meant to create the account? Second, is the person assigned? Third, what does the System Log say? Fourth, what attributes arrived? Fifth, what does the app’s own log say? This order finds most problems in minutes.
Debugging JIT is like tracing a lost parcel. First find out who was supposed to sign for it, then check the sender’s record, then check the label, and finally check the receiving desk’s log. Each step narrows the search.
15Advantages, Disadvantages and Trade-offs
JIT is a good tool for some jobs and a poor tool for others. These lists help you choose.
Advantages
- Quick to set up, with little extra software or cost.
- No ticket and no waiting for new people.
- Accounts are created only for people who actually use the app.
- Fewer idle accounts than a bulk creation approach.
- Account details are up to date at the moment of the first login.
- Works with open standards such as SAML.
- Reduces help desk work on day one.
Disadvantages
- Does not remove or disable accounts when people leave.
- Needs support from the app, and not every app offers it.
- A mismatch in the identifier creates duplicate accounts.
- Cannot pre-create accounts, so setup like sharing a folder must wait until first login.
- Roles depend on assertion contents, which must be guarded carefully.
- Per-seat apps may gain unexpected paid accounts.
- Little visibility: the app, not Okta, owns the account list.
Trade-offs to think about
Automatic or planned
JIT is fast because nobody reviews each account. Planned provisioning is slower but lets you control timing, roles and removal.
Few settings or full lifecycle
Basic JIT has few moving parts. Adding SCIM brings more setup, but closes the leaver gap.
Open door or counted seats
Letting any assigned person get an account is friendly, but it can raise license costs if assignments are wide.
Partner logins
Inbound federation with JIT brings contractors in smoothly, but each trusted partner becomes part of your security boundary.
16Design Patterns, Anti-patterns and Best Practices
Teams that use JIT well share a handful of habits. Teams that struggle share a handful of mistakes.
Patterns that work
Least-privilege default
Every JIT account starts with the lowest role. Higher roles come from a deliberate group change.
Group-based assignment
Assign apps to groups, never to individuals. Group membership becomes the single record of who may have an account.
Clean directory first
Fix blank names, odd emails and duplicates in Okta before switching on JIT. Bad data in becomes bad accounts out.
JIT plus SCIM
Use JIT as a safety net and SCIM for the full lifecycle, particularly for apps with sensitive data or paid seats.
Periodic access review
On a regular schedule, compare each app’s account list with the people assigned in Okta, and remove the extras.
Test with a fresh person
Every rollout is tested with a brand-new test user who has no account in the app yet.
Anti-patterns to avoid
What people do
They rely on JIT as the only lifecycle tool for an important app.
Why it hurts
Leavers keep accounts, and sometimes sessions, long after they have gone. An audit later finds dozens of accounts that nobody can explain.
Do this instead
Add SCIM or a scheduled review, and shorten app sessions, so that removal is as automatic as creation.
What people do
They give new accounts a powerful default role to save time on setup.
Why it hurts
Every person who logs in gets more access than needed, and a single group mistake turns into a security incident.
Do this instead
Start every account at the lowest level, and grant more through groups owned by administrators.
What people do
They enable JIT on an app that already has users, without comparing the two lists first.
Why it hurts
Every identifier mismatch creates a duplicate account, splitting each person’s history across two accounts.
Do this instead
Export both lists, resolve mismatches, and test with a few real people before the broad rollout.
Common beginner mistakes
- Forgetting to switch on JIT inside the app, while the Okta side looks perfect.
- Using attribute names that differ slightly from the app’s expected names.
- Assigning the app to everyone in the company when only one team needs it.
- Letting two systems both act as the master of a profile.
- Allowing JIT from an identity provider that is not fully trusted.
- Never reviewing the account list after the first week.
17Performance, Availability and Going Beyond Basic
Basic JIT is light work for the systems involved. A few extra topics still decide whether it stays smooth as the company grows.
Performance and scale
Creating one account is a tiny job: one lookup, one write, one confirmation. The cost of JIT is spread across the days when people first arrive, so it rarely creates a heavy load. The exception is a mass event, such as a merger or the first week of a school term, when thousands of people log in for the first time within a few hours. In those moments the app’s own account creation can slow down, and some apps limit how many accounts they accept per minute. Plan a staged rollout by assigning the app to a few groups at a time, instead of everyone on the same morning.
A restaurant can seat one guest in seconds, but if a coach party of two hundred walks in together, the host stand becomes a bottleneck. Taking bookings in waves, and opening extra host stands, keeps the queue calm without making each seating any faster.
Availability and reliability
JIT depends on two systems being reachable at login time: Okta and the app. If either is unavailable, a new person cannot get in, while a returning person with a live app session may not notice anything. Keep a short written plan for first-day access during an outage. For critical tools, create the accounts of key staff ahead of time so that important people are not blocked.
Stronger options when the basics are not enough
Add SCIM provisioning
SCIM lets Okta create accounts ahead of time and disable them when people leave. It is the natural upgrade when the leaver gap becomes a worry.
Scheduled access reviews
A recurring task compares each app’s account list with the people assigned in Okta and lists the extras for removal.
Lifecycle automation
Okta can run automated flows when a person joins, moves or leaves, such as placing them in groups or notifying an owner. These keep group membership accurate, which JIT depends on.
Stronger sign-in rules
An authentication policy for the app can demand extra proof for sensitive tools, so that account creation happens only after a strong check.
Measuring success
Good teams track a few simple numbers after enabling JIT. How many people reach the app without help-desk contact? How long does a new hire wait for access? How many accounts exist in the app compared with the number of people assigned in Okta? If the last number grows faster than the first two, leavers are piling up and it is time to add removal tools.
Use JIT where an account holds little data and a small delay in removing leavers is acceptable. Move to SCIM when the app holds sensitive data, costs money per seat, or must remove access at once.
JIT is a bicycle: simple, cheap and perfect for short trips. SCIM is a car: more setup and cost, but it carries more and goes farther. A company usually needs both, and the skill is knowing which to use for which journey.
18Real-World and Industry Examples
JIT shows up wherever many people need many apps and some of those people change often. These are typical scenarios.
Collaboration tools, customer relationship tools and video meeting tools are the usual homes of JIT, because each person needs only a basic account and the apps usually offer a setting for it. Business suites with deep per-person setup, such as finance or HR systems, more often use SCIM or a planned import, because their accounts need careful preparation.
A fast-growing software company
The company hires dozens of people each month. Okta places each new hire in a department group. The chat tool and the video meeting tool use JIT, so every new hire has working accounts on day one without any ticket. The finance system uses SCIM, because it needs an approval before any account exists.
A consulting firm with client contractors
Client companies bring their own staff to work in a shared project tool. The consulting firm adds each client’s identity system to Okta as an outside identity provider, and enables JIT with a low-access default group. Client staff sign in with their own company login. When a client removes a person from their own directory, that person can no longer reach the project tool.
A university with seasonal staff
Hundreds of short-term teaching assistants arrive each term. Their accounts in the course tool are created at their first login, and only for those who actually use it. After the term, the school runs a review that disables inactive accounts, closing the leaver gap that JIT leaves.
A retailer onboarding seasonal workers
A retailer needs a scheduling app for thousands of temporary workers every holiday season. JIT creates each worker’s account when they first open the app. The company uses a restricted group so that only store staff are assigned, which controls license cost.
A company after a merger
A company buys another and needs its people in shared tools quickly. The acquired company’s directory is connected to Okta as an outside identity provider. JIT creates Okta users when each person first signs in, giving everyone access within days while the long-term directory merge is planned.
19Frequently Asked Questions
20Summary and Key Takeaways
Just-In-Time provisioning is a simple and useful idea: do not build an account until the person actually shows up. In Okta it appears in two ways. Okta sends good attributes and the app creates the account, or Okta receives a login from an outside identity provider and creates the user itself. The basic version is quick to set up and easy to understand, but it only handles the arrival of people, not their departure.
Key Takeaways
- JIT creates an account at first login from the attributes in a trusted identity message, with no ticket and no advance setup.
- Always ask who creates the account. In the SAML app case it is the app. In the inbound federation case it is Okta.
- Basic setup means a few settings: the identifier, the attribute mappings, optional group statements, the app’s own JIT switch, and assignments.
- Exact matching decides everything. A spelling difference in the identifier creates a duplicate account, so clean and align data before rollout.
- Start at least privilege. Use the lowest default role and let only administrator-controlled groups raise it.
- JIT does not remove accounts. Close the leaver gap with SCIM, short sessions, and regular access reviews.
- Trust carefully. Connect only identity providers you trust, limit domains, and watch the number of accounts created each day.