Curiosity

Single Sign-On (SSO)

Curiosity Workspace integrates with external identity providers so users sign in with their existing corporate accounts. SSO is also the supported way to enforce MFA, conditional access, and group-based authorization in front of a workspace.

Curiosity Workspace SSO Configuration

Supported providers

Provider Protocol Guide
Microsoft Entra ID (formerly Azure AD) OAuth 2.0 / OIDC Microsoft Entra ID
Google Workspace OAuth 2.0 / OIDC Google Sign-In
Okta OIDC Okta
Auth0 OIDC Auth0
Generic SAML 2.0 SAML The /api/saml/ endpoints handle SAML; configure under Settings → SSO → SAML

Choosing a provider

If your users live in… Use… Notes
Microsoft 365 / Entra ID Microsoft Entra ID Map Entra groups to Workspace teams.
Google Workspace Google Sign-In Optionally restrict to your Google domain.
Okta universal directory Okta OIDC; SAML also supported.
Auth0 Auth0 OIDC; useful as a federation broker for multiple upstream IdPs.
Other (PingFederate, Keycloak, ADFS, …) SAML 2.0 Use the generic SAML configuration.

General configuration shape

Every SSO provider follows the same three-step flow:

  1. Register the workspace as an application in the identity provider.
  2. Set the redirect URI in the IdP to the workspace's callback path.
  3. Paste the IdP-issued credentials (Client ID, Client Secret, Tenant ID, etc.) into the workspace under Manage → Settings → Accounts → Single Sign-On.

Redirect URI format

The redirect URI always follows this exact shape:

{MSK_PUBLIC_ADDRESS}/api/{provider}sso/completed-login-attempt

Where {provider} is one of microsoft, google, okta, auth0. For example:

https://workspace.example.com/api/microsoftsso/completed-login-attempt
https://workspace.example.com/api/googlesso/completed-login-attempt

For SAML, the callback is https://workspace.example.com/api/saml/acs.

Exact match

The redirect URI registered with the IdP must match byte-for-byte, including the scheme, hostname, port, and trailing path. If MSK_PUBLIC_ADDRESS is not set, the workspace will generate redirect URIs against its internal hostname — which won't match what's registered in your IdP.

Group mapping (ReBAC)

The full power of SSO comes from mapping IdP groups to Workspace teams (_AccessGroup nodes). When a user signs in:

  1. The IdP returns the user's group memberships in the token.
  2. The workspace creates a _User node if it doesn't exist.
  3. The workspace adds the user to the matching teams via _MemberOf edges.
  4. Search and graph queries automatically respect those memberships through ReBAC.

Configure group mapping under Settings → SSO → Group Mapping after the basic OIDC/SAML flow is working.

Session management

Setting Description Recommended
Session duration How long a session remains active before re-authentication 8 hours for interactive users, 1 hour for admins
Inactivity timeout Automatic logout on idle 30 minutes for shared environments
Token rotation Rotate refresh tokens on use Enabled

Security recommendations

  • Enforce MFA in your IdP — every account, with no carve-outs for service accounts.
  • HTTPS-only for the workspace; never disable MSK_USE_HSTS once it's on.
  • Audit log — forward authentication events to your SIEM. See Monitoring.
  • Least privilege — map IdP groups to the most restrictive workspace teams that still allow the user's tasks.
  • Disable the local admin account after onboarding administrators via SSO.

Common troubleshooting

Symptom Likely cause
"Redirect URI mismatch" on the IdP MSK_PUBLIC_ADDRESS doesn't match the URI registered with the IdP (trailing slash, http vs https, port).
Login succeeds on the IdP but fails on the workspace Client secret typo, wrong tenant ID, or expired secret.
Login succeeds but the user lands without permissions Group mapping isn't configured, or the IdP isn't including group claims in the token.
Login worked yesterday, fails now after a restart MSK_JWT_KEY was autogenerated and changed on restart; set it explicitly.
Loop between IdP and workspace Cookies blocked, or the workspace hostname differs between the IdP redirect and what the browser sees.

For symptom-first debugging, see Troubleshooting → SSO.

Next steps

  • Pick a provider and follow the matching guide.
  • Wire group mapping under Settings → SSO → Group Mapping.
  • Confirm ReBAC is working: as a test user, search for content owned by a team you're not in and verify it's absent.
© 2026 Curiosity. All rights reserved.
Powered by Neko