SCIM and just-in-time (JIT) provisioning both create user accounts in your SaaS apps, but they work in different ways. JIT creates an account when a person first signs in through SSO. SCIM creates, updates and removes accounts from your directory, whether or not the person ever signs in. If you must disable access when someone leaves, SCIM is the mechanism that does it. JIT does not.
This guide compares the two on the points that matter to IT and security teams: timing, offboarding, groups, audit evidence and effort. It also covers SCIM vs LDAP and how to run SCIM when Google Workspace is your directory.
TL;DR
- JIT provisioning is a login-time mechanism. It runs on a user's first successful SAML or OIDC sign-in and creates the account from the assertion.
- SCIM 2.0 is a REST protocol that pushes creates, attribute updates, group changes and deactivations from the directory to the app, independent of logins.
- JIT has no native trigger for deprovisioning. For offboarding, group sync and compliance evidence, use SCIM.
- JIT is faster to start, because it reuses your SSO setup. Many teams run both: JIT as a fallback, SCIM as the lifecycle source of truth.
- If Google Workspace is your directory, a read-only SCIM sync service can connect it to any SCIM 2.0 app without scripts.
Table of Contents
- How JIT provisioning works
- How SCIM provisioning works
- SCIM vs JIT provisioning: side-by-side comparison
- The deprovisioning gap
- Groups, roles and attributes
- Effort and operational cost
- SCIM vs LDAP
- Choosing between SCIM and JIT
- Our perspective
- Running SCIM from Google Workspace
- A rollout plan that avoids surprises
- FAQ
- Sources
How JIT provisioning works
JIT provisioning is part of the SSO flow. A user opens the app and is redirected to the identity provider (IdP). After authentication, the IdP sends an assertion with attributes such as email, name and sometimes groups. If no matching account exists, the app creates one from those attributes.
What this means in practice:
- No account exists until the first login.
- Attributes are set at creation. Whether they refresh on later logins depends on the app.
- Nothing happens when a user is disabled, renamed, moved to another team or removed from a group, because no login event occurs.
- Setup is usually a toggle in the app plus attribute mapping in the SSO configuration.
JIT is a reasonable choice for small teams, for low-risk apps, and for apps where a stale account has little impact.
How SCIM provisioning works
SCIM (System for Cross-domain Identity Management) is an IETF standard defined in RFC 7643 (schema) and RFC 7644 (protocol). The IdP acts as the SCIM client. The app exposes a SCIM endpoint. The client uses HTTP verbs (POST, PUT, PATCH, DELETE) to synchronize users and groups.
In practice:
- An admin creates a user in the directory and assigns them to the app or a group.
- The IdP calls the app's SCIM endpoint and creates the account before the user signs in.
- When attributes or group membership change, the IdP sends a PATCH or PUT request.
- When the user is suspended or deleted, the IdP sends a deactivation or delete request. The app account is disabled at that point, not at the next login.
SCIM connections are authenticated with a bearer token that the app generates and the IdP stores. Treat that token as a credential: scope it, store it securely and rotate it.
SCIM vs JIT provisioning: side-by-side comparison
| Criterion | JIT provisioning | SCIM provisioning |
|---|---|---|
| Trigger | First successful SSO login | Change in the directory |
| Account exists before first login | No | Yes |
| Attribute updates | Only if the app re-reads the assertion at login | Pushed on change |
| Group and role sync | Limited, app-dependent | Supported through the Groups resource |
| Deprovisioning | No native mechanism | Deactivation or delete pushed by the IdP |
| Setup effort | Low, reuses SSO | Higher: endpoint, token, mapping |
| Dependency | SAML or OIDC | A SCIM 2.0 endpoint in the app |
| Audit evidence | Login events only | Provisioning events, if logged |
A comparison from an identity platform vendor reaches the same conclusion: SCIM creates users before login from directory sync and has strong lifecycle support, while JIT creates users at first successful login.
The deprovisioning gap
Offboarding is the point where the two approaches diverge most.
JIT is reactive. When an employee leaves and you disable their directory account, SSO blocks their next login. But the app account still exists. Sessions already open may remain valid until they expire, and data owned by the account stays in place. Access persists until a login attempt fails, and nothing tells the app that the user is gone.
This matters in three situations:
- Long-lived sessions and tokens. Apps with long session lifetimes, or with personal API tokens, can keep working after SSO is blocked. Check each app's behavior.
- Licenses. Orphaned accounts keep consuming seats until someone removes them by hand.
- Audits. Auditors ask for evidence that access was removed on the termination date. With JIT, you must collect that evidence app by app.
With SCIM, the IdP sends the deactivation as soon as the user is disabled. The app disables or removes the account in the same sync cycle. Security practitioners treat this gap as the deciding factor: organizations with strict offboarding or compliance requirements should use SCIM or an equivalent proactive mechanism.
Two cautions apply. First, SCIM support varies by app: some only deactivate, some delete, and some do not revoke existing sessions. Test offboarding in each app with a test user. Second, SCIM is push-based. If the connection breaks silently, identity data goes stale and the IdP has no way to know. Monitor sync health and audit it separately from authentication logs.

Groups, roles and attributes
JIT can set a role at first login if the assertion carries a group or role claim and the app maps it. After that, role changes depend on the app re-reading the claim at login, and many apps do not.
SCIM treats groups as a resource. When a user moves from Support to Engineering in the directory, the IdP updates the group memberships, and the app updates access. This gives you:
- Access that follows directory groups instead of manual role assignment in each app.
- Fewer permission leftovers from past roles.
- A single place, the directory, where access changes are made.
The cost is mapping work. Each app has its own attribute names, required fields and group semantics. Define a mapping per app and test it.
Effort and operational cost
JIT wins on setup. If SSO already works, enabling JIT is often a checkbox. SCIM requires more:
- An app tier that includes SCIM. Many vendors gate SCIM behind higher plans, so check pricing before you plan.
- A token or credential exchange.
- Attribute and group mapping.
- A client that can speak SCIM to the app.
That last item is where teams get stuck. Some directories include a SCIM client only for a catalog of pre-integrated apps. For an app outside that catalog, or one with a custom endpoint, teams end up writing and maintaining scripts.
Interoperability also needs attention. SCIM integrations often fail because implementations differ on PATCH syntax, pagination and case sensitivity. An IETF draft interop profile exists to narrow those differences. When you evaluate an app, ask whether it follows the core specification only or a stricter profile.
SCIM vs LDAP
Readers who search for SCIM vs LDAP are usually choosing how to connect a directory to applications.
- LDAP is a protocol for querying and authenticating against a directory, usually over a network that the app can reach. It fits on-premises and legacy systems.
- SCIM is an HTTP and JSON protocol for managing identity records in cloud apps. It fits SaaS, where the app cannot or should not connect to your internal directory.
The two are not interchangeable. LDAP lets an app read from a directory. SCIM lets a directory push changes to an app. For SaaS applications, SCIM is the usual choice. For on-premises software that already binds to LDAP, LDAP remains common. Many environments use both.
Choosing between SCIM and JIT
Use this checklist per application.
Choose SCIM when:
- The app holds sensitive data or admin capabilities.
- You must show auditors when access was removed.
- You pay per seat and need to reclaim licenses automatically.
- Access is driven by directory groups.
- Employees join and leave often.
JIT is acceptable when:
- The app is low risk and has no sensitive data.
- The user base is small and stable.
- The app does not offer SCIM on your plan.
- You pair it with a documented manual offboarding step.
Run both when:
- You want SCIM to create and remove accounts, and JIT as a fallback if someone signs in before the sync runs. Decide in advance which source wins on attribute conflicts, and check that the app does not create duplicate accounts.
A note on OIDC and SAML: JIT depends on the SSO protocol, but the choice between them does not change the provisioning question. Both can trigger JIT at login. Neither deprovisions.
Our perspective
We built AnySCIM because the usual outcome of a JIT-only setup is the same: accounts that outlive employees. The problem is rarely that teams do not know SCIM exists. It is that connecting every app to the directory takes scripts, tokens and mapping work that nobody owns.
Three positions guide how we design the product:
- Read-only access to Google Workspace. A provisioning service needs to read users and groups. It does not need to change them. We keep access read-only, so a sync problem cannot alter your directory.
- Audit logs you can export. A provisioning change is only useful as evidence if you can show it. Because SCIM is push-based, a silent failure leaves stale data. Logs let you check that the sync ran and what it sent.
- No per-app scripts. Group and attribute mapping, preconfigured templates and support for custom SCIM endpoints are meant to remove the glue code that breaks when an app changes.
Our advice: use SCIM for every app that supports it on your plan, keep JIT only where the risk is low, and test offboarding with a throwaway user before you trust it.
— Nicolas
Running SCIM from Google Workspace
Google Workspace is a common directory, but it does not act as a general SCIM client for arbitrary apps. Where an app is not in Google's catalog of pre-integrated apps, or exposes a custom SCIM endpoint, you need a separate client.
AnySCIM fills that role. It synchronizes users and groups from Google Workspace to any SCIM 2.0 compatible app in real time, with read-only access to Workspace, customizable group and attribute mapping, preconfigured integration templates and exportable audit logs. It supports custom SCIM endpoints without scripts, and a typical connection takes under an hour. Every plan starts with a 14-day free trial.
Published plans, based on the number of users in the managed directory:
| Plan | Monthly | Yearly |
|---|---|---|
| Startup | $49.99 per month | $249.99 per year |
| Scale | $199.99 per month | $999.99 per year |
| Enterprise | No published price | No published price |
See the AnySCIM pricing page for plan details.
A rollout plan that avoids surprises
- Inventory your apps. List each one, its SSO method, whether it supports SCIM, and the plan tier that includes it.
- Rank by risk. Start with apps that hold sensitive data or admin rights.
- Define the source of truth. Decide which Google Workspace groups or organizational units determine app access.
- Map attributes. Match email, name, username and group fields to the app's SCIM schema. Confirm which attribute is the unique identifier.
- Generate the SCIM token in the app. Store it in your secrets manager and note its rotation date.
- Run a dry-run first. Review what would be created, updated or removed before changes are applied.
- Test the full lifecycle. Create a test user, change a group, suspend the user, and confirm each step in the app.
- Check what happens to existing accounts. Accounts created earlier by JIT must match SCIM users, usually by email, or you may get duplicates.
- Monitor. Review sync logs on a schedule and alert on failures.
FAQ
Is JIT provisioning the same as SCIM?
No. JIT creates an account on a user's first SSO login, using attributes from the assertion. SCIM is a separate standard that manages the full account lifecycle from the directory: create, update, group changes and deactivation. They can coexist in the same app.
Can JIT provisioning deprovision users?
Not on its own. JIT has no trigger for removal, so access stays in place until the user's next login fails, and existing sessions may continue. Use SCIM or a documented manual offboarding process to remove accounts.
Do I need SSO if I use SCIM?
In most deployments, yes. SCIM handles provisioning and SSO handles authentication. SCIM creates the account, and SSO lets the user sign in to it. They solve different problems and are normally used together.
Does SCIM replace LDAP?
For cloud apps, it often does. SCIM pushes identity changes to SaaS apps over HTTP, while LDAP is mostly used for directory queries and authentication on internal or legacy systems. Many organizations keep both.
