01
The shape of the integration
SCIM, the System for Cross-domain Identity Management, moves user and group records between systems over a plain REST API. SenseCrypt is the service provider and your identity platform is the client that pushes every change. Nothing here polls your directory, and your joiner and leaver process is not duplicated on this side.
The base path sits on the tenant's own issuer host, and every request carries a bearer token scoped to that one tenant, which fails closed against any other. Two credential types work: an opaque token minted in the console, which is the shape most provisioning connectors expect, or a machine-to-machine access token whose role carries the SCIM capabilities.
The three discovery routes, the service provider configuration, the resource types and the schemas, are static metadata and are anonymous. Every route that touches data requires the token.
Users and Groups, with the operations connectors expect
Create, read, replace, patch, delete, filtered list and search on both resource types, plus a bulk endpoint that accepts up to 1000 operations in one call.
PATCH is tolerant where the standard allows it
add, replace and remove are accepted case-insensitively, with or without a path, because directories differ on capitalization. Unknown paths are ignored rather than rejected, which is the forward-compatible behavior SCIM asks for.
Filters are implemented in full, and fail loudly
The complete operator set, logical and, or and not, parenthesized grouping, and value paths such as work email. An unknown attribute path or a malformed filter is an error, never a silent listing of the whole directory.
Records are ETag guarded
Every resource carries a weak ETag, and conditional and bulk operations use it, so two connectors running at once cannot quietly overwrite each other.
There is nothing to change a password on
The service provider configuration advertises password change as unsupported, because no password exists anywhere in the system, and there is no self-service Me endpoint.
02
Create the account, then enroll the phone
This is the part of the integration that surprises teams, so it comes early. A SCIM-created user is a pending shell: a profile carrying the attributes and group memberships your directory owns, with no face binding at all. A shell cannot sign in, because the token grant requires an enrolled user.
The person supplies the missing half the first time they open the Authenticator app. The app claims the shell in place, which preserves the subject identifier your directory provisioned, the attributes it set and the memberships it granted. A device cannot overwrite values your identity platform owns.
For you that means one step to place in the onboarding plan. For the user it means one action on their own phone, and there is no separate enrollment system for anyone to operate.
03
What happens on the way out
Automatic provisioning is usually sold on the time saved creating accounts. The value is on the other side of the lifecycle. Orphaned accounts are what manual deprovisioning leaves behind, and each one is a way in that nobody is looking at.
Setting a user inactive is a reversible suspend that runs the eager revocation path at once: device keys revoked, refresh token families killed. Re-activating restores the account but not the credentials, so the person enrolls their device again. A delete is permanent, with the same revocation behind it.
Removing someone from a group does the same thing. Access is severed immediately rather than left to expire, and a user who is still in other groups simply re-authenticates. This is why lifecycle changes here land on the next token or refresh instead of at the end of a token lifetime.
The access gate is re-evaluated on every mint
Four points in the ceremony read group membership, the last two being the token exchange itself and every refresh that follows it. A change your directory pushes is therefore reflected in the next token rather than at the next expiry.
Provisioned groups are read-only in the console
A group your directory owns cannot be edited by a console operator, so the two copies cannot drift and the directory stays the source of truth.
Provisioning activity is recorded
These are administrative changes, so they are written to the tenant's hash-chained, tamper-evident audit log. The record shows when an account appeared, what changed on it, and when it was suspended or removed.
Errors are specific enough to debug
The SCIM error envelope names the problem: a uniqueness conflict for a duplicate user name or email, an invalid filter, an invalid value for a missing field or an illegal removal, and invalid syntax for an unsupported PATCH operation.
04
SCIM answers who exists, not who is signing in
Keeping those two apart makes a project much easier to scope. SCIM is a management API your directory calls on its own schedule. OIDC and SAML are what happen when a person arrives at an application. You want both, and they are configured separately.
Group membership is what connects the two. The groups your directory pushes are what the default-closed access gate reads, and a role conferred on a group reaches every member of it, including the members your directory adds next month. That is usually cleaner than assigning roles person by person.
In practice the sequence is short: your directory creates the account and its groups, the person enrolls a device on first use, and from then on every sign-in is a live face ceremony that ends in a standard token or assertion.
Attribute mapping is bounded by the tenant schema
A SCIM field is stored when it matches one of the tenant's attribute definitions, and the name cluster maps onto the corresponding attributes. Unknown SCIM attributes are ignored: definitions are never created implicitly.
The enterprise user extension is tolerated, not mapped
Inbound bodies may carry it without being rejected, but its fields are not mapped and never appear on output. Do not design a workflow that depends on round-tripping them.
One token, one tenant
A SCIM credential reads and writes only inside the tenant it was issued for. If you operate several tenants, each has its own base URL and its own token.
05
Compare the details
| In your directory | Over SCIM | In the tenant |
|---|---|---|
| A joiner is created | POST to Users | A pending shell with attributes and memberships, no face binding yet, and no ability to sign in until the person enrolls |
| Attributes change | PATCH or PUT on a user | Mapped attributes are updated where a tenant definition exists. Unknown fields are ignored rather than invented |
| Someone joins a group | PATCH a group, adding a member | Membership changes what they may sign in to and which roles they inherit, from the next mint |
| Someone leaves a group | PATCH a group, removing a member | Device keys and refresh families are revoked at once. A user still in other groups re-authenticates |
| A leaver is suspended | PATCH active to false | A reversible suspend with credentials revoked immediately. Re-activating requires the device to enroll again |
| A leaver is removed | DELETE the user | Permanent removal, with the same full revocation of keys and token families |
| Reconciliation | GET Users with a filter | The full SCIM filter grammar, capped at 200 results per page. A bad filter is an error, never a full listing |
A joiner is created
- Over SCIM
- POST to Users
- In the tenant
- A pending shell with attributes and memberships, no face binding yet, and no ability to sign in until the person enrolls
Attributes change
- Over SCIM
- PATCH or PUT on a user
- In the tenant
- Mapped attributes are updated where a tenant definition exists. Unknown fields are ignored rather than invented
Someone joins a group
- Over SCIM
- PATCH a group, adding a member
- In the tenant
- Membership changes what they may sign in to and which roles they inherit, from the next mint
Someone leaves a group
- Over SCIM
- PATCH a group, removing a member
- In the tenant
- Device keys and refresh families are revoked at once. A user still in other groups re-authenticates
A leaver is suspended
- Over SCIM
- PATCH active to false
- In the tenant
- A reversible suspend with credentials revoked immediately. Re-activating requires the device to enroll again
A leaver is removed
- Over SCIM
- DELETE the user
- In the tenant
- Permanent removal, with the same full revocation of keys and token families
Reconciliation
- Over SCIM
- GET Users with a filter
- In the tenant
- The full SCIM filter grammar, capped at 200 results per page. A bad filter is an error, never a full listing
06
Frequently asked questions
Can a provisioned user sign in straight away?
No. A SCIM-created user is a pending shell with a profile and group memberships but no face binding, and the token grant requires an enrolled user. The person completes the binding the first time they open the Authenticator app, and the app claims the shell in place, so the provisioned subject, attributes and memberships are preserved.
How quickly does deactivation take effect?
Immediately. Setting a user inactive revokes their device keys and kills their refresh token families on the spot, and the access gate is re-evaluated on every token mint and every refresh. Nothing waits for an access token to expire.
Which directories can drive this?
Any client that speaks SCIM 2.0, which includes the provisioning connectors built into the major identity platforms. The endpoint accepts an opaque token minted in the console, which is the model those connectors usually expect, or a machine-to-machine access token carrying the SCIM capabilities.
Is SCIM an alternative to single sign-on?
No, they cover different halves. SCIM answers who exists and which groups they belong to, while OIDC or SAML authenticates the person at the door. The two are configured separately, and a normal deployment runs both.
What happens if we re-activate a suspended user?
The account comes back and the credentials do not. Suspension revokes the device keys, so the person enrolls their device again. That is deliberate: a suspension is often a response to a suspected compromise, and restoring the account should not quietly restore a key that may be in someone else's hands.
Can console operators edit the groups our directory pushes?
No. Provisioned groups are read-only in the admin console so your directory stays the source of truth. They take part in the access gate exactly like any other group.