SSO Runbook — Okta¶
End-to-end setup for sign-in with Okta. ~10 minutes from a clean Okta tenant to a working "Sign in with Okta" button on the MFCloud console.
What you'll end up with¶
- An OIDC Web Application in your Okta org.
- Sign-in + sign-out redirect URIs registered.
- Group claim configured so Okta groups drive MFCloud roles.
- A client ID + secret you'll paste into MFCloud's Settings → SSO.
Prerequisites¶
- Okta Super Admin or App Admin role.
- MFCloud master reachable at a stable HTTPS URL.
Step 1 — Create the OIDC application¶
- Okta Admin Console → Applications → Applications → Create App Integration.
- Sign-in method = OIDC – OpenID Connect.
- Application type = Web Application.
- Next.
- App settings:
- App integration name =
MFCloud Console - Logo (optional) = upload an MFCloud icon for the Okta dashboard.
- Grant type — leave defaults: Authorization Code ticked.
- Sign-in redirect URIs =
https://<your-mfcloud-host>/api/auth/oidc/callback - Sign-out redirect URIs =
https://<your-mfcloud-host>/ - Controlled access = pick Allow everyone in your organization to access OR Limit access to selected groups (recommended — assign only
mfcloud-adminsetc.). - Save.
You land on the app's General tab. Copy two values from the Client Credentials section:
| Field | Where it goes in MFCloud |
|---|---|
| Client ID | Settings → SSO → Client ID |
| Client secret | Settings → SSO → Client Secret |
The Issuer URL is your Okta tenant's domain:
(For custom auth servers replace with https://<your-tenant>.okta.com/oauth2/<authServerId> — see Okta docs.)
Step 2 — Configure the group claim¶
So Okta groups end up in the ID token MFCloud reads.
- Security → API → Authorization Servers → default → Claims → + Add Claim.
- Fill in:
- Name =
groups - Include in token type = ID Token, Always
- Value type = Groups
- Filter = Matches regex
.*(everything) — or Starts withmfcloud-to limit to MFCloud-relevant groups only. - Include in = The following scopes =
openid - Create.
Now any group the user is a member of (matching the filter) will appear in the groups claim of their ID token.
Step 3 — Assign users / groups¶
- App's Assignments tab → Assign → Assign to People or Assign to Groups.
- Add the users/groups that should be able to sign in to MFCloud.
Without this, even an authenticated Okta user will get a 403 at the sign-in step.
Step 4 — Paste into MFCloud¶
In the MFCloud console:
- Settings → 🔑 Single Sign-On (OpenID Connect).
- Fill in:
- Issuer URL —
https://<your-tenant>.okta.com - Client ID — from Step 1.
- Client Secret — from Step 1.
- Sign-in Button Label —
Sign in with Okta. - Default Role —
Tenant Viewer. - Email Claim —
email. - Groups Claim —
groups(matches what Step 2 created). - Enable OIDC sign-in ✓.
- Save SSO Settings.
Step 5 — (Optional) Map Okta groups to MFCloud roles¶
In the same Settings → SSO panel:
- Scroll to the IdP GROUP → MFCloud ROLE MAPPING table.
- + Add Mapping for each group:
- Group ID = the Okta group's name (e.g.
mfcloud-admins). Okta'sgroupsclaim sends group names, not the GUID-like IDs Entra uses. - Role = pick from dropdown.
- Priority =
100is fine unless you need a specific override order. - Save Group Mappings.
A member of mfcloud-admins will now land as Super Admin on their next sign-in.
Step 6 — Test it¶
- Sign out of MFCloud.
- Login page → Sign in with Okta.
- Okta hosted sign-in → authenticate → consent (first time) → back to MFCloud dashboard.
- User avatar should show your Okta email; role should match the group mapping.
- Sign out — should bounce through
<tenant>.okta.com/oauth2/v1/logoutand return to MFCloud login.
Troubleshooting¶
| Symptom | Cause | Fix |
|---|---|---|
400: redirect_uri does not match |
Step 1 sign-in redirect URI mismatch | Check master sends X-Forwarded-Proto: https. Uvicorn needs --proxy-headers. |
User is not assigned to the client |
Step 3 not done | Assign the user/group on the app's Assignments tab. |
| Group claim missing from token | Step 2 not done OR filter doesn't match user's groups | Re-check the claim filter; "regex .*" includes everything. |
| Logout doesn't return to MFCloud | Sign-out redirect URI not registered (Step 1) | Add https://<your-mfcloud-host>/ under Sign-out redirect URIs. |