This is an experimental implementation and may not fully comply with SCIM 2.0 standards. The API is subject to change in future releases.
Overview
SCIM 2.0 enables:- Automatic User Provisioning - Create users when assigned to the application
- User Deprovisioning - Disable/delete users when unassigned
- Group Sync - Automatically create and manage groups with members
- Profile Updates - Keep user information synchronized
- Lifecycle Management - Handle user state transitions (active/inactive)
Configuration
Enable SCIM
Set these environment variables:Generate SCIM Token
Create a strong, random token for SCIM authentication:SCIM Endpoint
The SCIM v2 endpoints are available at:Authentication
All SCIM requests require Bearer token authentication:Supported Endpoints
| Endpoint | Methods | Description |
|---|---|---|
/ServiceProviderConfig | GET | SCIM service capabilities |
/ResourceTypes | GET | Supported resource types |
/Schemas | GET | SCIM schemas |
/Users | GET, POST, PUT, PATCH, DELETE | User management |
/Groups | GET, POST, PUT, PATCH, DELETE | Group management |
Identity Provider Configuration
Okta
-
Add Application Integration:
- Applications → Create App Integration
- Select “SCIM 2.0 Test App (Header Auth)”
-
Configure SCIM:
- SCIM Base URL:
https://your-domain.com/api/v1/scim/v2 - Authentication Mode: HTTP Header
- Authorization:
Bearer your-scim-token
- SCIM Base URL:
-
Enable Features:
- Create Users
- Update User Attributes
- Deactivate Users
- Sync Password (optional)
- Import Groups
-
Attribute Mapping:
-
Set SCIM_AUTH_PROVIDER:
Azure AD (Microsoft Entra ID)
-
Enterprise Applications:
- Azure Active Directory → Enterprise applications
- New application → Create your own application
- Select “Integrate any other application you don’t find in the gallery”
-
Provisioning Configuration:
- Provisioning → Automatic
- Tenant URL:
https://your-domain.com/api/v1/scim/v2 - Secret Token:
your-scim-token - Test Connection
-
Mappings:
- Provision Azure Active Directory Users:
- Provision Azure Active Directory Users:
-
Provision Groups (optional):
- Enable group provisioning
- Map
displayName→displayName - Map
members→members
-
Set SCIM_AUTH_PROVIDER:
Google Workspace
-
Custom SAML/SCIM App:
- Admin Console → Apps → Web and mobile apps
- Add custom SAML app or SCIM app
-
SCIM Configuration:
- SCIM Base URL:
https://your-domain.com/api/v1/scim/v2 - Authorization: Bearer Token
- Access Token:
your-scim-token
- SCIM Base URL:
-
Attribute Mapping:
-
Set SCIM_AUTH_PROVIDER:
User Provisioning Flow
1. User Assignment
When a user is assigned to the app in your IdP:- User account with
userNameas email - Links
externalIdto OAuth provider (viaSCIM_AUTH_PROVIDER) - Sets role to
userifactive: true,pendingifactive: false
2. User Update
Profile changes are synchronized:3. User Deactivation
When a user is unassigned or suspended:Group Provisioning
Create Group with Members
Add Member to Group
Remove Member from Group
Docker Compose Example
Troubleshooting
SCIM Token Authentication Fails
Check:ENABLE_SCIM=trueis setSCIM_TOKENmatches the token configured in IdP- Authorization header:
Authorization: Bearer your-token
Users Not Created
Check:- SCIM test connection succeeds in IdP
- User attribute mappings are correct (especially
userNameandemails) SCIM_AUTH_PROVIDERis set correctly
ExternalId Not Stored
Problem: User created but SSO login fails Solution: SetSCIM_AUTH_PROVIDER to match your OAuth provider:
Group Sync Issues
Check:- Group provisioning is enabled in IdP
- Member IDs in SCIM requests match user IDs in Open WebUI
- Admin user exists for group creation
Security Considerations
Implementation Details
- SCIM Router:
backend/open_webui/routers/scim.py - Supports SCIM 2.0 core schemas (RFC 7643)
- Pagination with
startIndexandcount - Filtering:
userName eq "user@domain.com",externalId eq "id" - Partial updates via PATCH operations
Next Steps
- LDAP Integration - Directory services authentication
- RBAC - Configure role-based permissions
- OAuth SSO - Set up single sign-on