Skip to main content

Single Sign-On (SSO)

All Tiers

Calabi supports Single Sign-On (SSO) for all tiers. Every Calabi deployment includes AWS Cognito as the default identity provider. Enterprise customers can additionally configure SAML 2.0 federation to external identity providers — Okta, Azure Active Directory, Google Workspace, and any SAML 2.0-compliant IdP — and automate user provisioning with SCIM.


Default Authentication: AWS Cognito

Every Calabi tenant is provisioned with a dedicated AWS Cognito User Pool. Out of the box, users authenticate with an email address and password managed by Cognito.

FeatureDefault Configuration
Password policyMinimum 12 characters, 1 uppercase, 1 number, 1 special character
MFAOptional (TOTP via authenticator app)
Email verificationRequired for new accounts
Password resetSelf-service via email link
Session duration8 hours (configurable up to 24 hours)
Token typeJWT (ID token + Access token)

How SSO Works

Enabling MFA for All Users

  1. Navigate to AdminSecurityAuthentication.
  2. Under Multi-Factor Authentication, select Required for all users.
  3. Users are prompted to configure TOTP on next login.

SAML 2.0 Integration

Calabi supports SAML 2.0 Service Provider (SP)-initiated and Identity Provider (IdP)-initiated flows for federating with your corporate identity provider.

Supported Identity Providers

ProviderTestedNotes
OktaYesFull SAML + SCIM support
Azure Active Directory / Entra IDYesFull SAML + SCIM support
Google WorkspaceYesSAML only (no SCIM)
OneLoginYesFull SAML + SCIM support
PingFederateYesSAML only
JumpcloudYesSAML + SCIM
Any SAML 2.0 IdPCompatibleStandard SP metadata exchange

SAML Attributes Required

Calabi's SAML SP requires the following attributes in the SAML assertion:

AttributeFormatDescription
emailurn:oasis:names:tc:SAML:1.1:attribute:EmailAddressUser's primary email (used as username)
firstNameStringUser's first name
lastNameStringUser's last name
groupsMulti-value stringGroup memberships for role mapping (optional but recommended)

Calabi SP Metadata

Your IdP needs Calabi's Service Provider metadata. Retrieve it from:

https://<your-calabi-domain>/api/auth/saml/metadata

Or download the XML file from AdminSSOSP MetadataDownload.

Key SP values:

Entity ID:  https://<your-calabi-domain>/api/auth/saml/metadata
ACS URL: https://<your-calabi-domain>/api/auth/saml/callback
SLO URL: https://<your-calabi-domain>/api/auth/saml/logout
Binding: HTTP-POST

Step-by-Step: Okta SAML Setup

Step 1: Create the Okta Application

  1. Log in to your Okta Admin Console.
  2. Navigate to ApplicationsApplicationsCreate App Integration.
  3. Select SAML 2.0Next.
  4. App name: Calabi (or your internal name).
  5. App logo: Upload the Calabi logo (optional).
  6. Click Next.

Step 2: Configure SAML Settings in Okta

FieldValue
Single sign-on URLhttps://<your-calabi-domain>/api/auth/saml/callback
Audience URI (SP Entity ID)https://<your-calabi-domain>/api/auth/saml/metadata
Name ID formatEmailAddress
Application usernameEmail
ResponseSigned
Assertion SignatureSigned
Signature AlgorithmRSA-SHA256
Digest AlgorithmSHA256
Assertion EncryptionUnencrypted (or Encrypted if your security policy requires it)

Attribute Statements:

NameName FormatValue
emailBasicuser.email
firstNameBasicuser.firstName
lastNameBasicuser.lastName

Group Attribute Statements (for role mapping):

NameName FormatFilter
groupsBasicMatches regex: ^Calabi-.*
  1. Click NextFinish.

Step 3: Download the Okta IdP Metadata

  1. In the Okta app page, go to Sign On tab.
  2. Under SAML Signing Certificates, click ActionsView IdP Metadata.
  3. Copy the metadata XML URL (e.g., https://<your-okta-domain>/app/<app-id>/sso/saml/metadata).

Step 4: Configure SAML in Calabi

  1. Navigate to AdminSSO+ Add SAML Provider.
  2. Fill in:
FieldValue
Display NameOkta
IdP Metadata URLPaste the Okta metadata URL from Step 3
Email Attributeemail
First Name AttributefirstName
Last Name AttributelastName
Groups Attributegroups
Default RoleViewer (role assigned to new users if no group mapping matches)
  1. Under Group Mappings, add:
IdP GroupCalabi Role
Calabi-AdminsAdmin
Calabi-StewardsData Steward
Calabi-AnalystsAnalyst
Calabi-ViewersViewer
  1. Click Save.

Step 5: Test the SAML Integration

  1. In Calabi Admin → SSO, click Test SAML Login next to your Okta provider.
  2. You are redirected to Okta's login page.
  3. Log in with a test Okta account that is assigned to the Calabi app.
  4. On success, you are redirected back to Calabi and logged in.
  5. Verify the user's role matches the expected group mapping.

Step 6: Set as Default Provider

  1. In AdminSSO, click Set as Default next to the Okta provider.
  2. The Calabi login page now shows a "Sign in with Okta" button as the primary login option.

Azure Active Directory SAML Setup (Summary)

The steps for Azure AD (Entra ID) follow the same pattern with these Azure-specific values:

FieldAzure AD Value
Identifier (Entity ID)https://<your-calabi-domain>/api/auth/saml/metadata
Reply URL (ACS URL)https://<your-calabi-domain>/api/auth/saml/callback
Sign on URLhttps://<your-calabi-domain>
Name IDuser.mail

Attribute mappings in Azure AD:

email        → user.mail
firstName → user.givenname
lastName → user.surname
groups → user.groups (use Group IDs or display names)

Google Workspace SAML Setup (Summary)

FieldGoogle Workspace Value
ACS URLhttps://<your-calabi-domain>/api/auth/saml/callback
Entity IDhttps://<your-calabi-domain>/api/auth/saml/metadata
Name IDBasic Information → Primary Email
Name ID FormatEMAIL

Google Workspace does not support SCIM. User provisioning must be done manually or via the Calabi API.


SCIM Provisioning

SCIM (System for Cross-domain Identity Management) automates user lifecycle management — creating, updating, and deprovisioning users in Calabi when you make changes in your IdP.

Supported IdPs for SCIM

  • Okta
  • Azure Active Directory / Entra ID
  • OneLogin
  • Jumpcloud

Configuring SCIM

  1. In Calabi, navigate to AdminSSOSCIM.
  2. Click Generate SCIM Token — copy and save the token.
  3. Note the SCIM Endpoint URL:
    https://<your-calabi-domain>/api/scim/v2
  4. In your IdP, configure SCIM provisioning:
    • SCIM connector base URL: https://<your-calabi-domain>/api/scim/v2
    • Authentication: Bearer Token
    • Token: the token generated in step 2
    • Supported operations: Push new users, Push profile updates, Push groups, Deactivate users

SCIM Operations

SCIM EventCalabi Action
User created in IdP and assigned to Calabi appUser created in Calabi with default role
User's group membership changesUser's Calabi role updated per group mapping
User deactivated in IdPUser account deactivated in Calabi (cannot log in; data preserved)
User deleted in IdPUser account deactivated in Calabi (not deleted to preserve audit trail)
Group renamed in IdPGroup mapping updated automatically

Session Management

SettingDefaultConfigurable
Session lifetime8 hours1–24 hours (Admin → Security)
Idle timeout2 hours30 min–8 hours
Concurrent sessionsUnlimitedCan restrict to 1 per user
Session revocationSupportedAdmins can terminate any active session
Refresh tokens30 daysConfigurable

To terminate a user's active sessions:

  1. AdminUsers → select user.
  2. Click Revoke All Sessions.
  3. The user is logged out within 60 seconds on all devices.

SSO Troubleshooting

SymptomLikely CauseResolution
"SAML assertion invalid"Clock skew between IdP and SPEnsure both servers sync with NTP; Calabi allows ±5 minute skew
"Email attribute not found"Attribute name mismatchVerify the attribute name in Calabi matches exactly what the IdP sends
User role is "Viewer" after loginNo group mapping matchedCheck that the groups attribute is being sent and group names match mappings
Redirect loop on loginACS URL misconfigured in IdPVerify the ACS URL ends with /api/auth/saml/callback
"User already exists" on first SSO loginEmail matches an existing local accountAdmin can merge the accounts in AdminUsersMerge Identity
SCIM users not createdBearer token expired or incorrectRegenerate the SCIM token and update the IdP SCIM configuration
"Invalid issuer" in SAML responseEntity ID mismatchVerify Entity ID in IdP matches Calabi's SP metadata Entity ID exactly