User provisioning with SCIM¶
SCIM 2.0 makes your identity provider the source of truth for who has a Venturi account and what they can do. Once SCIM is enabled, joiners, movers, and leavers flow from your IdP into Venturi automatically: create a user in your IdP and a Venturi account appears; change their group and their role changes; deprovision them and their access is removed. No manual user administration, and, critically, no orphaned access when someone leaves.
Deprovisioning is fail-closed. When your IdP sends the deprovisioning request, Venturi deactivates the account, revokes its active sessions server-side, resolves every grant to deny, and records the event in your audit log, all within the sync SLA. No degraded or cached access survives.
SCIM complements SSO
SSO governs authentication (proving who someone is at sign-in). SCIM governs the account lifecycle (whether the account exists at all, and what groups/roles it carries) ahead of time. Run both: SSO for sign-in, SCIM for lifecycle, and IdP group mapping as the bridge between them.
What SCIM manages¶
Effects of changes sent by your identity provider (IdP). Role mappings connect IdP groups to Venturi roles:
| Object | Change | Effect |
|---|---|---|
| Users | Created | Account provisioned, email-bound |
| Users | Updated | Profile and status synced |
| Users | Removed | Account deactivated (fail-closed) |
| Groups | Created | Group recognized |
| Groups | Updated | Membership synced |
| Groups | Removed | Membership removed → grants recomputed |
| Role mappings | Created | Admin-configured in Venturi |
| Role mappings | Updated | Re-evaluated each sync |
| Role mappings | Removed | N/A |
Venturi implements the standard SCIM 2.0 Users and Groups resource types over
the standard /scim/v2 endpoints, including ServiceProviderConfig, Schemas,
and ResourceTypes discovery, so the SCIM provisioning built into Okta,
Microsoft Entra ID, and any other SCIM 2.0 client works without custom code. A
DELETE on a user is a soft delete (deactivate and tombstone) that preserves
audit history; re-provisioning the same externalId re-links the account
rather than creating a duplicate.
By default, SCIM endpoints accept 10 requests per second per bearer token, with
bursts of up to 50. A client that exceeds that rate receives 429 Too Many Requests with a
Retry-After header.
Enable SCIM¶
- In
Settings / Admin / Identity / SCIM, enable SCIM provisioning. Venturi returns your tenant’s SCIM base URL (https://on the SaaS tier; a self-hosted deployment uses its own instance host) and issues a bearer token. The value shown in the console is authoritative.api. venturi. systems/ scim/ v2 - In your IdP’s provisioning settings, paste the base URL and bearer token.
- Configure attribute mappings (email, display name) and group push so your IdP sends group membership to Venturi.
- In
Settings / Admin / Identity / SSO, map each pushed IdP group to a Venturi role and scope. - Run Test connection in
Settings / Admin / Identity / SCIM. The SCIM connection goes live only after the test passes; a failed test leaves the configuration unverified, and it cannot provision. - Start provisioning. New accounts, group changes, and deprovisioning take effect within the sync SLA.
Rotate the SCIM token like any other credential
The SCIM bearer token is a long-lived credential until you rotate it, and it
is managed at Settings / Admin / Credentials in the
admin console. Rotate it on your normal schedule or
immediately if it is ever exposed. Rotation is a step-up-protected, audited
action: the old and new tokens both work until the overlap window shown in
the panel closes, so provisioning continues while you update your IdP, and
already-provisioned users are not interrupted.
Sync SLA¶
Your IdP decides when it sends a change: some IdPs push changes as they happen, and others send them on a provisioning cycle (Microsoft Entra ID, for example, runs periodic incremental cycles). Venturi’s sync SLA starts when the SCIM request reaches Venturi:
| Change your IdP sends | Effect in Venturi | Commitment |
|---|---|---|
| Create a user | Account created, email-bound, with no grants beyond its mapped groups | When Venturi acknowledges the request |
| Change group membership | Effective roles recomputed from the group-to-role map | On the user’s next authorization decision; cached decisions are invalidated by the change |
| Deactivate or delete a user | Account deactivated, active sessions revoked server-side, every grant resolved to deny | Sessions revoked within 60 seconds by default, and within 300 seconds at most |
If revocation cannot complete within 300 seconds, Venturi forces short-TTL revalidation of every session so stale access fails closed rather than lingering.
The sync SLA covers changes your IdP delivers. A change can also fail to arrive, for example a deactivation lost during an IdP outage. To catch it, Venturi reconciles its accounts against your IdP every 60 minutes by default. Each run flags any account that is active in Venturi but deactivated or absent at the source, and your admins can fix it with a one-click remediation.
An account that three consecutive reconciliations find orphaned (the default
threshold) is deactivated automatically, with all of its sessions revoked. A run
that cannot get a complete read from your IdP, such as during an IdP outage,
still reports drift. It never auto-deactivates an account only because that
account was absent from the incomplete read. Reconciliation findings and the
orphan threshold are shown and set at Settings / Admin / Identity / SCIM.
The deprovisioning guarantee¶
Deprovisioning is the control your security team cares about most, so it is the one Venturi makes strongest:
User removed/disabled in your IdP
│
▼ (IdP sends the change; Venturi applies it within the sync SLA)
Venturi account → deactivated
├─ active sessions revoked server-side
├─ every grant resolves to deny
└─ deprovision recorded in the audit trail
▼
No degraded, cached, or residual access survives: fail closed
The account’s audit history is preserved: overrides, reviews, approvals, and policy changes the user made remain in the append-only audit log even though the account can no longer authenticate. If the user is also the subject of a data-erasure request, their personal data is handled under the platform’s retention and erasure path (crypto-shred within 30 days), while the non-personal audit record persists under its own lawful basis.
Just-in-time (JIT) provisioning¶
JIT provisioning auto-creates an account on a user’s first SSO login, without a prior SCIM push. It is off by default and uses the IdP’s explicit provisioning policy:
- It activates only for a claimed, verified email domain.
- A matching IdP group-to-role mapping assigns the configured grants.
- If no mapping matches, the account has zero grants and cannot be used until an administrator assigns a role. It does not receive Viewer access automatically.
- The creation is recorded in the audit log like any other.
Use JIT to provision mapped users at their first federated sign-in; use SCIM group push to provision and update membership before they sign in. Both paths respect the configured group-to-role grants, tenant boundaries, and seat limits.
Least privilege is the default at every entry point
Whether an account arrives by invite, by SCIM, or by JIT, it never starts with more than the access it was explicitly granted. Elevation is always an admin action, and always audited.
Manual provisioning still works¶
SCIM does not remove the manual path. An admin can still invite a user by email from the admin console; the invited user completes registration using an authentication method allowed by the tenant policy. Self-registration is never available: all accounts are invitation- or IdP-gated to preserve tenant isolation. You can run SCIM for your federated population and invite the occasional contractor or auditor by hand, in the same tenant.
Next steps¶
- Decide the role each IdP group maps to in Roles & access control.
- Configure sign-in and SSO-only enforcement in SSO.
- Watch provisioning events land in the audit log.
Sign in to send feedback. Opens in a new tab.
Copy page details
Docs feedback: User provisioning with SCIM
Page: https://docs.venturi.systems/administration/scim/