SSO & SCIM
Single sign-on with OpenID Connect, verified e-mail domains, just-in-time accounts and SCIM 2.0 provisioning of members and groups.
Content reviewed September 26, 2026
Overview
ERP Preflight supports single sign-on with OpenID Connect (authorization code flow with PKCE). Each organization configures one identity provider. SAML 2.0 is not available.
Organization owners and security admins configure SSO and SCIM under Integrations → SSO & SCIM. These settings require an interactive sign-in — API keys cannot change them — and every change is recorded in the audit log.
Set up the identity provider
- Register ERP Preflight as an OIDC client at your identity provider, using the redirect URI shown in the form (it ends in
/api/v1/sso/callback). - Enter the Issuer URL, the Client ID and, for a confidential client, the Client secret. On saving, ERP Preflight fetches
<issuer>/.well-known/openid-configurationand validates it; the issuer must be reachable from ERP Preflight. - Keep the default Scopes
openid email profileor adjust them;openidis required. - Choose the Role for just-in-time provisioned users:
VIEWER(default),AUDITOR,MIGRATION_CONSULTANTorLEAD_ARCHITECT. Owner and security-admin roles are never granted automatically.
The client secret is stored encrypted and never displayed again; leave the field empty to keep the stored secret. With a secret, ERP Preflight authenticates at the token endpoint with HTTP Basic; without one, the flow relies on PKCE alone.
Verify e-mail domains
SSO sign-ins are only accepted for e-mail addresses of domains your organization has proven to own:
- Add the domain (for example
example.com) under Verified domains. - Create the DNS TXT record shown there: name
_erppreflight-challenge.<domain>, valueerppreflight-domain-verification=<token>. - Choose Verify DNS. When the record is found, the domain is marked
VERIFIED.
A verified domain belongs to exactly one organization.
Sign-in, provisioning and enforcement
Members open the SSO sign-in page (/sso), enter their work e-mail address and are forwarded to the identity provider of the organization that verified the domain. After the sign-in, ERP Preflight validates the ID token — signature (JWKS), issuer, audience, expiry and nonce — and requires the identity provider to assert a verified e-mail address (email_verified) on one of the organization's verified domains.
- Just-in-time provisioning (on by default): on the first SSO sign-in, a missing account is created and added to the organization with the role chosen above. Accounts created this way have no password.
- Without just-in-time provisioning, only existing members of the organization can sign in with SSO — for example users provisioned through SCIM.
- An SSO sign-in creates the same server-side session as a password sign-in; signing out and ending sessions under Settings → Security work the same way.
- Enforcing SSO: with
enforceSsoset, members whose e-mail address belongs to a verified domain can no longer sign in with a password or an e-mail link; the sign-in page then offers Continue with single sign-on. The switch is set through the administration API (PUT /api/v1/sso/admin/config); the form in the web app does not show it, and saving the form — or aPUTwithoutenforceSso— keeps the current setting.
SCIM 2.0 provisioning
With SCIM 2.0 your identity provider creates, updates and deactivates organization members and groups.
- Under Integrations → SSO & SCIM choose Create SCIM token. The bearer token starts with
erppf_scim_and is shown once; ERP Preflight stores only its SHA-256 hash. Tokens are listed with prefix and last use and can be revoked. - Configure your identity provider with the SCIM 2.0 base URL
https://<your API host>/api/v1/scim/v2and the headerAuthorization: Bearer erppf_scim_….
Provisioning acts on the organization membership. Creating or activating a user adds the membership; active: false or DELETE removes it and access ends immediately. User accounts are global and are never deleted through SCIM. New members receive the role configured for just-in-time provisioning (VIEWER when no identity provider is configured). SCIM never grants the owner role, and the last organization owner cannot be deprovisioned.
A provisioned group can be mapped to one of the roles VIEWER, AUDITOR, MIGRATION_CONSULTANT, LEAD_ARCHITECT or SECURITY_ADMIN with PATCH /api/v1/sso/admin/scim-groups/{id} and a body such as {"role": "AUDITOR"} (null removes the mapping). Members of a mapped group get that role; owners keep theirs. The web app does not offer this mapping yet.
SCIM endpoints and supported operations
GET /api/v1/scim/v2/ServiceProviderConfig
GET /api/v1/scim/v2/ResourceTypes
GET /api/v1/scim/v2/Users?filter=userName eq "jane@example.com"&startIndex=1&count=100
POST /api/v1/scim/v2/Users
GET /api/v1/scim/v2/Users/{id}
PUT /api/v1/scim/v2/Users/{id}
PATCH /api/v1/scim/v2/Users/{id}
DELETE /api/v1/scim/v2/Users/{id}
GET /api/v1/scim/v2/Groups?filter=displayName eq "SAP architects"
POST /api/v1/scim/v2/Groups
GET /api/v1/scim/v2/Groups/{id}
PUT /api/v1/scim/v2/Groups/{id}
PATCH /api/v1/scim/v2/Groups/{id}
DELETE /api/v1/scim/v2/Groups/{id}- Users: the e-mail address is taken from the primary
emailsentry, otherwise the first entry, otherwiseuserName.name(formatted, orgivenNameandfamilyName) anddisplayNameare used only when the account is created.PUTupdatesuserName,externalIdandactive; changing the e-mail address is rejected.PATCHsupports the operationsaddandreplaceforactive. - Groups:
displayName,externalIdandmembers(ids of users of this organization; other ids are ignored).PATCHsupportsadd,replaceandremoveonmembers, removal viamembers[value eq "<id>"], and changingdisplayName. - Filters (URL-encoded): users by
userName eq,externalId eqoremails eq; groups bydisplayName eq. User lists are paged withstartIndexandcount(default 100, at most 200). - Not supported: bulk operations, sorting, ETags, password changes and the
/Schemasendpoint.
Responses and errors use application/scim+json and the SCIM error schema. Requests of a suspended organization are rejected.