SfSkills Domains Docs GitHub

Home / security / scim-provisioning-integration

scim-provisioning-integration

Use when designing or reviewing SCIM-based user lifecycle provisioning into Salesforce from Okta, Azure AD / Entra, or another IdP — create/update/deactivate, group-to-permission-set mapping, attribute mapping, and deprovisioning semantics. NOT for SSO/authentication setup (see single-sign-on skills) — use integration/manufacturing-cloud-setup.

Open the skill folder on GitHub


SCIM Provisioning Integration

SCIM turns an IdP into the source of truth for who exists, what they are allowed to do, and when they leave. Done well, it eliminates the "orphan user" problem that every manual provisioning model produces. Done poorly, it creates silent license burn, privilege creep, or worse — users who still have active API tokens after HR thinks they were deprovisioned.

Salesforce accepts SCIM via the User SCIM 2.0 API (enabled per-org) and supports attribute mapping, group-to-Permission-Set-License mapping, and freeze/deactivate via standard SCIM patch semantics. Okta, Entra, OneLogin, and other major IdPs ship Salesforce SCIM connectors; the connector mechanics vary slightly, but the design decisions are the same.

The job is to decide: what's the source of truth, which attributes flow, which groups map to which entitlements, and what happens at termination.


Before Starting

Core Concepts

What SCIM Covers

Lifecycle eventBehavior
CreateIdP triggers user creation when a user is added to an assigned group.
UpdateProfile attribute changes flow from the IdP on change.
DeactivateUser is set to active = false when removed from the assigned scope.
Group-to-entitlementIdP groups map to Salesforce Permission Sets, Permission Set Groups, or Public Groups.

What SCIM Does Not Cover

Deactivation Semantics

Salesforce does not delete users — it deactivates. A SCIM DELETE or PATCH active=false freezes login but does not reassign records or revoke tokens automatically. A complete deprovisioning runbook must also:


Common Patterns

Pattern 1: Single-Group-Per-PermissionSet

Each IdP group maps to exactly one Permission Set. Easy to audit, easy to reason about. Recommended default.

Pattern 2: Role-Based Group Bundle

An IdP group maps to a Permission Set Group that bundles multiple Permission Sets. Fewer IdP groups to maintain; requires discipline in keeping the PSG membership current.

Pattern 3: Birthright + Entitlement Layer

All users get a "birthright" baseline set via their IdP tenant. Additional entitlements layer via explicit group membership. Good for large orgs with common baseline access.

Pattern 4: Freeze-First Deprovisioning

IdP deactivation fires a freeze-user call first (immediate login block), then a follow-up deactivate after a compensating runbook reassigns records and revokes tokens. Critical for regulated industries.

Pattern 5: Two-IdP Topology

One IdP provisions employees, another provisions contractors. Clear boundary — each tenant owns a disjoint set of users; Salesforce sees both via two SCIM connections.


Decision Guidance

SituationRecommended ApproachReason
Simple org with linear entitlementsSingle-group-per-PS (Pattern 1)Easiest audit
Role-based access model in IdPPSG bundles (Pattern 2)Maps cleanly from roles
Regulated industry, strict deprov SLAFreeze-first (Pattern 4)Legally defensible
Mixed workforce (employee / contractor)Two-IdP topology (Pattern 5)Ownership clarity
Salesforce license constraintsCombine with JIT provisioning on loginAvoids pre-allocating licenses

Review Checklist

  1. Confirm IdP source of truth and attribute ownership.
  2. Design group-to-entitlement mapping; produce the audit table.
  3. Decide profile strategy (single default + PS layering is the usual choice).
  4. Build the deprovisioning runbook (freeze → revoke tokens → reassign → deactivate).
  5. Pilot with a small group; monitor license consumption and lag.
  6. Document ownership between IT, HR, and Salesforce admin teams.

Salesforce-Specific Gotchas

  1. Salesforce does not delete users — SCIM DELETE deactivates.
  2. OAuth tokens survive user deactivation unless explicitly revoked.
  3. Permission Set License assignment is separate from Permission Set assignment — SCIM mapping must handle both.
  4. Profile changes via SCIM are unusual; most orgs use a default profile and layer entitlements via PS/PSG.
  5. Freezing is near-instant; deactivation propagation can lag a few minutes.

Proactive Triggers

Output Artifacts

ArtifactDescription
Attribute mapping documentIdP attribute → Salesforce User field
Entitlement mappingIdP group → PS / PSG
Deprovisioning runbookFreeze → revoke → reassign → deactivate

Package files