Configure global SSO
Single sign-on for the whole install — one IdP, every user. Configured by a super-admin at
Admin → Settings → Global SSO. Per-org SSO is a separate path; see Configure per-org SSO.
When to use global SSO:
- Single-tenant deployment — one customer owns the whole platform, manages every org from one place. The IdP authenticates every user; org membership + role come from IdP groups via the org-role assignment grid.
- Mixed tenancy — some orgs have their own SSO, others don't. Global SSO is the fallback for the orgs without per-org SSO and for super-admin break-glass.
Steps
-
Open the form.
Admin → Settings → Global SSO. If the block is collapsed, click the header. -
Fill in IdP details:
- Issuer URL — the IdP's OIDC discovery base (e.g.
https://acme.eu.auth0.com/). The form runs a discovery check on Save and refuses if the URL doesn't serve/.well-known/openid-configuration. - Client ID — from the IdP application you created for dtedge.
- Client secret — paste the new value. Stored AES-encrypted
at rest; the form shows
(stored — leave blank to keep)on subsequent edits. - Scopes — defaults
openid profile email; addgroupswhen the IdP needs an explicit scope to ship groups. - Claim mappings — override the standard claim names if
your IdP uses non-standard ones (Auth0 namespacing, Azure
roles, etc.). Empty = standardemail/name/groups.
- Issuer URL — the IdP's OIDC discovery base (e.g.
-
Choose policy toggles:
- Auto-provision — first-time SSO user creates a fresh dtedge user record.
- Default role — required when auto-provision is on; the role the new user gets in the org. (Less relevant for global SSO — the org-role assignment grid usually drives it.)
- Require SSO — disables local password login for every non-super-admin user across the install. Use this when the IdP is the only intended path in. Super-admins always keep local as a break-glass.
-
Org-role assignments (optional but high-value). Rows of
(IdP group → org → role). On every SSO login the user's membership is reconciled: added to orgs whose IdP group they're in, removed from orgs they're not. Manual memberships outside the grid stay untouched.Example:
acme-admins → Acme → adminacme-engineers → Acme → editorbortech-viewers → BorTech → viewerSee Manage global org-role assignments for the full row-by-row workflow.
-
Save. The form runs:
PingIssuer(discovery URL must respond)- Validation of each org-role assignment row (org must exist; role must exist in that org)
If validation fails, the response toast names the offending row. Common errors:
GLOBAL_SSO_ASSIGNMENT_UNKNOWN_ORG— the org was deleted or the UUID was hand-editedGLOBAL_SSO_ASSIGNMENT_UNKNOWN_ROLE— the role doesn't exist in that org's role catalog
Verifying
After Save:
- Open an incognito tab →
/login→ click Sign in with SSO. - Enter the org slug (or leave blank for global). The form posts
to
/api/auth/discoveryand shows the SSO button. - Click it. You go through the IdP. After successful login, you land in the dtedge dashboard.
- Backend logs at INFO show:
sso callback claims has_groups=true groups=[admin editor]sso group reconcile added role role=admin
Troubleshooting
| Symptom | Cause |
|---|---|
Save returns ISSUER_UNREACHABLE | Typo in the issuer URL, or the dtedge pod can't reach it (egress firewall, internal-only IdP). |
Login lands on /sso/error with "NOT_PROVISIONED" | Auto-provision is off and the user hasn't been pre-invited. Turn auto-provision on or invite the user first. |
| User logs in but has no role | Either default_role is empty (and no group matches the assignment grid), or the IdP isn't shipping groups. Backend log shows has_groups=false in the second case. |
| Roles disappear on every login | Group→role mapping is configured but the IdP stopped shipping the groups claim. dtedge skips reconcile in that case as of the HasGroupsClaim fix — but if you see roles getting revoked, confirm has_groups=true in the backend log. |
Local password login refused with SSO_REQUIRED | You turned Require SSO on. Use the SSO path or, if you're a super-admin and locked out, fall back to local password (super-admins are exempt). |
See also
- Configure per-org SSO — per-org IdP
- Manage global org-role assignments
- Identity and SSO — the mental model