Skip to main content
The SCIM (System for Cross-domain Identity Management) service enables automated user and group provisioning for enterprise organizations using identity providers like Azure AD, Okta, and OneLogin.

Overview

SCIM is an enterprise feature available in the commercial version of Bitwarden Server.
The SCIM service provides:
  • SCIM 2.0 Protocol: Standards-compliant user and group provisioning
  • User Provisioning: Automatic user creation, updates, and deactivation
  • Group Management: Synchronize organizational groups and memberships
  • API Key Authentication: Secure authentication for identity providers
  • Real-time Sync: Instant propagation of identity changes

Architecture

SCIM 2.0 Specification

The service implements SCIM 2.0 core schema (RFC 7643) and protocol (RFC 7644):
  • Users: /v2/{orgId}/users
  • Groups: /v2/{orgId}/groups
  • Service Provider Config: /v2/ServiceProviderConfig
  • Resource Types: /v2/ResourceTypes
  • Schemas: /v2/Schemas

Configuration

From bitwarden_license/src/Scim/Startup.cs:29:
Service Configuration

Authentication

API Key Authentication

The SCIM service uses API key authentication instead of OAuth:
API Key Format: Organization-specific key generated in web vault Location: Organization Settings → SCIM Provisioning

SCIM Context

From bitwarden_license/src/Scim/Startup.cs:50:
SCIM Context
The SCIM context middleware validates:
  • API key authenticity
  • Organization ID matches authenticated organization
  • Organization has SCIM enabled
  • API key has not been revoked

Users Endpoint

List Users

Response:

Create User

Request Body

Update User

Patch User

Patch Operations

Delete User

Deleting a user via SCIM removes them from the organization but does not delete their Bitwarden account.

Groups Endpoint

From bitwarden_license/src/Scim/Controllers/v2/GroupsController.cs:17:
Groups Controller

List Groups

Response:

Create Group

Update Group Membership

Add Members
Remove Members

SCIM Commands and Queries

From bitwarden_license/src/Scim/Startup.cs:89:
SCIM Services
These services implement:
  • Commands: Create, update, patch, delete operations
  • Queries: List, filter, search operations
  • Validation: SCIM schema compliance
  • Business Logic: Bitwarden-specific rules and constraints

Event Logging

All SCIM operations are logged with EventSystemUser.SCIM: From bitwarden_license/src/Scim/Controllers/v2/GroupsController.cs:112:
Event Logging
Logged events:
  • User invited/confirmed/removed
  • Group created/updated/deleted
  • Group membership changes
  • Failed authentication attempts

Middleware Pipeline

From bitwarden_license/src/Scim/Startup.cs:95:
Request Pipeline

Supported Identity Providers

Azure AD

Microsoft Entra ID (Azure Active Directory) provisioning

Okta

Okta Identity Cloud integration

OneLogin

OneLogin directory synchronization

JumpCloud

JumpCloud directory integration

Setup Guide

1

Enable SCIM

Navigate to Organization Settings → SCIM Provisioning
2

Generate API Key

Click “Enable SCIM” to generate organization-specific API key
3

Configure IdP

In your identity provider, add Bitwarden SCIM application:
  • Base URL: https://scim.bitwarden.com/v2/{organizationId}
  • API Key: Use generated key as bearer token
4

Test Connection

Use IdP’s test connection feature to verify configuration
5

Assign Users**

Assign users and groups in IdP to begin provisioning

Filtering and Pagination

The SCIM service supports standard SCIM query parameters:

Filtering

Supported operators:
  • eq - equals
  • ne - not equals
  • sw - starts with
  • ew - ends with
  • co - contains

Pagination

Parameters:
  • startIndex: 1-based index (default: 1)
  • count: Number of results per page (default: 100)

Error Handling

SCIM errors follow RFC 7644 error response format:
Error Response
Common status codes:
  • 400 - Bad Request (invalid SCIM request)
  • 401 - Unauthorized (invalid API key)
  • 404 - Not Found (resource doesn’t exist)
  • 409 - Conflict (duplicate external ID)
  • 500 - Internal Server Error

Deployment

Environment Variables

Docker

Rate Limiting

SCIM endpoints may be rate-limited to prevent abuse. Implement exponential backoff in IdP sync jobs.
Recommended sync intervals:
  • Full sync: Every 24 hours
  • Incremental sync: Every 30-60 minutes
  • Real-time updates: As changes occur (with backoff)

Troubleshooting

Common Issues

Debug Logging

Limitations

SCIM provisioning has the following limitations:
  • Users cannot be created without an email address
  • Only organization users are managed (not entire Bitwarden accounts)
  • Custom attributes are not supported
  • Password management is not supported via SCIM
  • Collections are not managed via SCIM

Best Practices

  1. External IDs: Always set unique externalId for users and groups
  2. Incremental Sync: Use incremental sync to reduce API calls
  3. Error Handling: Implement proper error handling and retry logic
  4. Monitoring: Monitor SCIM sync logs in IdP admin console
  5. Testing: Test with small group before full deployment