Overview
Bifrost Enterprise connects your organization’s identity provider to Bifrost through OAuth 2.0 / OIDC login, provider-backed directory sync, and inbound SCIM 2.0 provisioning. A single configuration gives you:- Single sign-on (SSO) via OAuth 2.0 / OIDC with JWKS-based JWT validation
- Automatic role assignment using custom claims, app roles, or group-to-role mappings
- Team synchronization from IdP groups into Bifrost teams
- Business unit mapping from IdP attributes to Bifrost business units
- Bulk user provisioning with filter-preview before import
- Background lifecycle reconciliation every 24 hours for imported users
- OIDC session refresh checks every 15 minutes to confirm users are still active with the IdP
- Silent token refresh using server-stored refresh tokens when the user remains active
- Inbound SCIM 2.0 — IdPs can push user and group changes to Bifrost in real time via the
/scim/v2API

Supported Identity Providers
Pick your IdP to follow a step-by-step setup guide. All providers share the same Bifrost configuration surface — the only difference is how the OAuth client and role/group claims are created on the provider side.Okta
OIDC with Org or Custom Authorization Servers, plus group-to-role mapping and API tokens for bulk user sync and 24-hour background reconciliation.
Microsoft Entra
Entra ID (Azure AD) with app roles, group claims, and v1.0 / v2.0 token support.
Keycloak
Self-hosted or managed Keycloak with OIDC login and Admin REST API based user provisioning.
Zitadel
Cloud or self-hosted Zitadel with project-scoped role claims and service-account-based provisioning.
Google Workspace
Google Workspace domains with OAuth login plus optional Directory API sync via a service account.
Auth0
Auth0 with Post Login Actions for custom claims, role-to-role mapping, and optional M2M app for bulk user sync.
Generic OIDC
Any standards-compliant OIDC provider — PingIdentity, ForgeRock, OneLogin, JumpCloud, and others not covered by a dedicated guide.
How it works

- Login — Bifrost redirects unauthenticated users to the provider’s authorization endpoint (Authorization Code flow).
- Token exchange — on callback, Bifrost exchanges the code for an access token and refresh token, stores them in an
HttpOnlycookie / server session, and validates the JWT against the provider’s JWKS. - Identity extraction — configurable JWT claims (
userIdField,rolesField,teamIdsField) are mapped to a Bifrost user, role, and teams. Provider-specific app roles or custom attributes override claim lookup. - Attribute mapping — optional
attributeRoleMappings,attributeTeamMappings, andattributeBusinessUnitMappingstranslate arbitrary claim values (e.g., a department string or Okta group name) into Bifrost roles, teams, or business units. - Session refresh checks — every 15 minutes, Bifrost refreshes the OIDC session. If the session cannot be refreshed, Bifrost checks with the OIDC server whether the user is still active.
- Background reconciliation — Bifrost periodically calls the configured provider’s directory APIs to reconcile imported users and mapped roles, teams, and business units.
- Bulk import — admins can preview users matching a filter and bulk-import them via the dashboard, which calls the provider’s user directory API.
- Daily sync — Bifrost reconciles imported users every 24 hours.
- SCIM push — IdPs configured with a SCIM provisioning connector can push user creates, updates, and deletes to Bifrost in real time via
/scim/v2. - Decommissioning — if the OIDC server reports that a user is no longer active, the 24-hour reconciliation no longer finds them in the active source set, or a SCIM DELETE arrives, Bifrost decommissions that user locally.
Capabilities
Background lifecycle reconciliation
Bifrost’s lifecycle model combines source-side reconciliation, OIDC session validation, and real-time SCIM push. Every 15 minutes, Bifrost refreshes active OIDC sessions. If a session cannot be refreshed, Bifrost checks with the OIDC server whether the user is still active; if the provider reports the user is inactive, Bifrost decommissions that user locally. After users are imported, Bifrost also uses the configured provider credentials to sync with the IdP in the background every 24 hours. That sync updates mapped roles, teams, and business units, and decommissions imported users that are disabled, unassigned, or no longer present in the provider source set. When an IdP SCIM connector is configured, user deactivation and deletion are also handled immediately as the IdP pushes changes.Configuration reference
All providers share the same outer config shape inconfig.json:
Provider-specific fields (domain, tenant ID, server URL, service-account credentials) are documented in each IdP’s setup guide.
Changing
scim_config at runtime through the UI is applied after saving. For file-based configuration, restart the Bifrost server to pick up changes.Environment variable support
Fields marked env.* supported accept"env.VAR_NAME" in addition to a literal value — Bifrost resolves the variable from the process environment at startup. Attribute mapping arrays are always plain JSON (they cannot reference env vars).
Okta
Microsoft Entra ID
Keycloak
Zitadel
Google Workspace
Configuring from the dashboard
- Navigate to Governance → User Provisioning in the Bifrost dashboard.
- Select your identity provider from the OIDC Provider dropdown.
- Fill in the provider-specific fields. Required fields are marked and validated on Verify.

- Click Verify to test credentials end-to-end. Bifrost will reach the provider’s JWKS / directory endpoint and report any failures.
- Configure Attribute → Role / Team / Business Unit mappings as needed.
- Toggle Enabled and click Save Configuration.
Attribute mappings
Attribute mappings let you translate claim values into Bifrost roles, teams, or business units without forcing your IdP admins to restructure claim names.
- Role mappings — first match wins. Set a fallback with
"value": "*"at the end. - Team mappings and business unit mappings — all matching rules apply, so a user with
department=Platformandgroup=srecan be placed on multiple teams.
realm_access.roles).
attributeType field
Team and business unit mappings have an optional attributeType field:
attributeType unset (or "user") for all OIDC claim-based mappings.
attributeValue field
Team and business unit mappings also support an optional attributeValue field. This is the key Bifrost uses to look up the attribute in a SCIM-provisioned user’s stored profile (a flat key-value map).
attribute and attributeValue serve different codepaths:
attributeis used for OIDC JWT claim lookup and supports dotted paths into nested objects (e.g.realm_access.roles).attributeValueis used for SCIM profile lookup against the flat map stored from inbound SCIM pushes. It defaults toattributewhen not set.
department, title, userType, costCenter, etc.) the two values are identical, so you never need to set attributeValue — the same name works for both OIDC and SCIM paths.
You only need attributeValue when a single mapping rule must cover both OIDC and inbound SCIM, and the OIDC claim path differs from the SCIM storage key — for example, a custom attribute sent under profile.jobFunction in the JWT but stored as jobFunction in the SCIM profile:
attributeValue has no effect.
SCIM attribute suggestions
When configuring attribute mappings for SCIM-provisioned users, the following attributes are available from the user payload: Core attributes — sent by all SCIM-capable providers:
Enterprise extension attributes — sent by most providers via
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:
Custom extension attributes — any additional attributes sent under custom URNs are flattened and made available by their field name for use in mappings.
Inbound SCIM 2.0 provisioning
Bifrost exposes a SCIM 2.0 endpoint that identity providers can use to push user and group changes in real time, without waiting for the next 24-hour reconciliation cycle.Base URL
Authentication
All SCIM requests must include a bearer token:How SCIM writes trigger governance updates
Every SCIM create, replace, or patch immediately re-evaluates the user’sattributeRoleMappings, attributeTeamMappings, and attributeBusinessUnitMappings against the current SCIM attributes. Changes to role, team, or business unit assignments are committed to the database and broadcast to all cluster nodes before the SCIM response is returned.
Only SCIM-managed memberships are affected — any manually assigned teams or roles are preserved.
Bulk user provisioning
There are two ways to get users into Bifrost, depending on what your IdP supports: Via API token (bulk import): Providers that support a directory API (Okta, Entra, Keycloak, Zitadel, Google Workspace) allow you to preview and import users in bulk from the dashboard:- Go to Governance → User Provisioning → Import Users.
- Select a filter — groups, roles, departments, or a custom query depending on provider support.
- Click Preview to see up to 50 matching users.
- Click Import to create them in Bifrost with role / team / BU assignments applied.

Troubleshooting
Provider-specific troubleshooting lives in each IdP’s guide.
Related
- Role-Based Access Control — permissions model and custom roles
- Advanced Governance — budgets, limits, and compliance
- Audit Logs — track authentication events and role changes

