Skip to main content

SCIM Provisioning

nexusID speaks SCIM 2.0 in both directions:

  • Inbound — nexusID is a SCIM server: an upstream identity system (Microsoft Entra ID, Workday, Okta, …) provisions users and groups into nexusID.
  • Outbound — nexusID is a SCIM client: nexusID provisions users and groups out to downstream SaaS apps (the same role Okta plays when it "pushes" to an app).

If you've configured provisioning in Okta ("Choose provisioning options" — SCIM connector base URL, an authentication mode, and push actions), that screen is Okta acting as the client. In nexusID terms that maps to either side depending on direction — see the mapping table at the end.


A. Inbound — provision into nexusID (nexusID = SCIM server)

Use this when an upstream IdP/HR system should create, update, and deactivate users in nexusID.

1. Endpoints

Base URL: https://<your-nexusid-host>/scim/v2 (e.g. https://demo.nexusid.ai/scim/v2).

ResourceEndpoints
DiscoveryGET /ServiceProviderConfig, GET /ResourceTypes, GET /Schemas
UsersGET/POST /Users, GET/PUT/PATCH/DELETE /Users/{id}
GroupsGET/POST /Groups, GET/PUT/PATCH/DELETE /Groups/{id}

Schemas: core User, the enterprise User extension (department, manager, employeeNumber, …), and core Group. Inbound writes drive the joiner/mover/leaver lifecycle (source=scim).

2. Authentication — Bearer token (HTTP Header)

Inbound SCIM uses an API key as a Bearer token, validated per request (the route is open at the firewall, authenticated at the controller). The upstream sends:

Authorization: Bearer idk_xxxxxxxxxxxx

(X-API-Key: idk_… is also accepted.)

3. Create the token (admin)

  1. Admin → API Management (/admin/api-management).
  2. Create API key → name it, add scope scim:provision, optionally set an expiry, rate limit, and allowed IPs.
  3. Copy the full key — it's shown once. Paste it into the upstream system's Authorization field.

4. Point the upstream at nexusID

In the upstream connector, set:

  • SCIM base URL: https://<your-nexusid-host>/scim/v2
  • Authentication: HTTP Header / Bearer token → the idk_… key above
  • Unique identifier: userName (email) or externalId

Limitations (inbound): equality filters only (userName eq, emails eq, externalId eq); no Bulk; no sort or attribute selection.


B. Outbound — provision out to a downstream app (nexusID = SCIM client)

This is the direct analog of the Okta provisioning screen. You configure a Provisioning Target for each downstream app and nexusID pushes to it.

1. Create a provisioning target (admin)

Admin → Provisioning Targets (/admin/jit-ui/targets) → Add target:

FieldMeaning (≈ Okta)
Endpoint URLthe app's SCIM connector base URL (nexusID calls …/Users, …/Groups)
ProtocolSCIM_2_0 (also REST / Webhook)
Auth typeBEARER_TOKEN, BASIC_AUTH, OAUTH2_CLIENT_CREDENTIALS, API_KEY, or NONE (≈ Okta's Basic / HTTP-Header / OAuth2)
Credentialsthe token / username+password / OAuth2 token_url+client_id+client_secret+scope — stored encrypted
Attribute mappingJSON mapping nexusID claims → downstream SCIM attributes
Password syncopt-in: also PATCH the password attribute

2. Push actions

ActionHow nexusID does it≈ Okta
Create userPOST {endpoint}/UsersPush New Users
Update / deactivate userPATCH {endpoint}/Users/{id} (active=false on leaver)Push Profile Updates / deactivate
Password syncPATCH {endpoint}/Users/{id} (password), opt-in
Push groupPOST/PATCH {endpoint}/Groups — upsert by displayName, members resolved to the target's user idsPush Groups

User create/deactivate and password sync run automatically through the JIT/lifecycle flow. Group push is available on demand via:

POST /admin/jit/targets/{targetId}/push-group
{ "displayName": "Engineering", "members": ["alice@acme.com", "bob@acme.com"] }

It upserts the SCIM Group by displayName and sets its members to those users' ids at the target (members not yet present at the target are skipped — provision them first).

Limitations (outbound): group push is on-demand (auto-push on every membership change is a follow-up); REST/Webhook targets don't support group push.


Okta provisioning screen → nexusID

Okta "Choose provisioning options"nexusID inbound (server)nexusID outbound (client)
SCIM connector base URLnexusID gives you …/scim/v2you set the target's Endpoint URL
Auth: Basic / HTTP-Header / OAuth2Bearer API key (scim:provision)Bearer / Basic / OAuth2-CC / API-Key
Import new users + profile updatesinbound POST/PUT/PATCH → JML
Push New Users / Profile UpdatesPOST create / PATCH update
Push Groupsinbound Groups/push-group
Where to configureAdmin → API ManagementAdmin → Provisioning Targets