SSO, SCIM & identity sources (firm attribution)
Identity is the hard dependency under the whole access map: native audit
attributes an access to a credential, and only an identity roster can
bind that credential to an agent or person. This page wires the three
identity surfaces: console SSO login, SCIM provisioning into the
control plane, and the roster sources (LDAP, Okta, Entra ID) that make
attribution attributed instead of approximate.
1. Console SSO (OIDC / SAML)
Section titled “1. Console SSO (OIDC / SAML)”Federated login is served through the engine’s federation seam. The posture is honest by construction:
- The login flow endpoints exist in every build, and the engine keeps every secret-bearing flow value server-side — the CSRF state, the OIDC nonce, the PKCE verifier (only the S256 challenge goes to the provider). Authorization Code + PKCE is always on.
- Single-IdP OIDC/SAML login is available in every edition, Community included.
Configure it through the console’s managed SSO settings. When no managed
configuration exists, the engine uses the boot environment
(
OLIVARES_SSO_PROTOCOL,OLIVARES_OIDC_*orOLIVARES_SAML_*). Without a configured provider, the existingNoFederationfallback returns501 sso_not_configured; this indicates missing configuration, not a protocol reserved for the commercial editions. - The redirect/ACS URI your IdP must carry is exact
(
…/v1/auth/federation/callbackon your console origin — RFC 9700 exact matching, no prefix tricks).
The console’s Identity & NHI → SSO & SCIM tab documents the live configuration, checks your IdP’s redirect URI against the exact expected value, and shows the connection state — and where a panel’s backend is a declared contract not yet live, it says “backend pending” rather than rendering fabricated data:
2. SCIM provisioning (inbound) — Business
Section titled “2. SCIM provisioning (inbound) — Business”The inbound SCIM server is a Business capability (Identity & Scale). A Community
server mounts the same URLs, authenticates the token and then answers HTTP 501 in
the SCIM error shape, naming Business; nothing is read or written. In Community you
remove a person from the organization in the console (People) or with
DELETE /v1/members/{id}.
With Business, the control plane is a standard SCIM 2.0 (RFC 7644) service provider at:
/v1/scim/v2/Users/v1/scim/v2/Groups- Auth: a tenant-bound admin/owner API token on the SCIM
integration — the same opaque-token model as the rest of the API, no
separate SCIM secret type. The URLs are always mounted (not
feature-gated); Community answers
501there. - Users provisions and deprovisions principals. Changes depend on delivery and successful processing of the SCIM request; check its response and the affected access rather than treating an HR event as proof of completed revocation. SCIM does not remove operating-system accounts.
- Groups carries identity-to-group reference data. Each group can map to
a control-plane role via
mapped_role— and that mapping is operator-owned: it is set on the control-plane side and audited (scim.group.role.map); an IdP push never silently escalates a role. Unknown members in a pushed group are skipped and audited, not invented.
3. Roster sources: LDAP, Okta, Entra ID — Business/Enterprise
Section titled “3. Roster sources: LDAP, Okta, Entra ID — Business/Enterprise”Roster sources feed module VI’s identity inventory and — this is the point — give module III the bindings that upgrade attribution:
{ "sources": [ { "name": "corp-ldap", "kind": "ldap", "tenant": "<tenant-id>", "config": { "url": "ldaps://ldap.corp.example:636", "bind_dn": "cn=olivares-ro,ou=svc,dc=corp,dc=example", "bind_password": "<reference>", "base_dn": "dc=corp,dc=example" } }, { "name": "okta", "kind": "idp", "tenant": "<tenant-id>", "config": { "provider": "okta", "base_url": "https://corp.okta.com", "api_token": "<reference>" } } ]}Key LDAP options (from the shipped descriptor): user_filter /
group_filter, privileged_group_dns (groups whose membership is itself a
privileged-access signal), nhi_dn_suffix (which subtree holds non-human
identities), start_tls, page_size. The idp kind takes
provider: okta (with api_token) or provider: entra (with tenant_id /
client_id / client_secret); okta and entra also work directly as the
kind.
How this upgrades attribution — precisely
Section titled “How this upgrades attribution — precisely”A roster source registers identities (by external id) and, where the
directory declares them, permitted grants. When an observed edge’s origin
matches a non-shared roster identity, module III ties the access to that
identity and the edge’s confidence is upgraded to attributed. Identities
that several workloads share stay honestly approximate — the roster cannot
un-share a credential; only issuing per-agent identity can
(the bridge to governance).
Dedicated agent-identity and workload-identity kinds (the agent federation sources — Entra Agent ID, AgentCore, SPIFFE and peers) are the firm per-agent signal; group/directory rosters sharpen people and service accounts.
Honest limits
Section titled “Honest limits”- Single-IdP SSO is included in Community. Multiple-IdP routing and login-time group mapping are provided by the corresponding private identity module. They do not change the availability of general users, groups and permission management.
- A roster cannot fix a shared credential. It can only tell you, honestly, that the credential is shared.
- SCIM is inbound provisioning — the control plane does not push identities back to your IdP, and the Security-Event-Token receiver is an inbound surface, not an outbound webhook.
Related
Section titled “Related”- Connect a source — why identity is the hard dependency.
- Govern and approve — roles, RBAC and what a
mapped_rolegrants. - Connectors & coverage tiers — the full identity source list (Vault, Infisical, Keycloak, SPIFFE, the agent-identity federation kinds).