SCIM Server
A comprehensive SCIM 2.0 server library for Rust that makes identity provisioning simple, type-safe, and enterprise-ready.
SCIM (System for Cross-domain Identity Management) is the industry standard for automating user provisioning between identity providers and applications.
Development Status: This library is under active development. Pin to exact versions for stability:
scim-server = "=0.5.0". Breaking changes are signaled by minor version increments until v1.0.
🚨 v0.5.0 Breaking Changes
Provider Interface Refactored: Major simplification through helper traits with method renames:
// Before v0.5.0
provider.conditional_update.await?;
provider.conditional_delete.await?;
// v0.5.0+ (current)
provider.conditional_update_resource.await?;
provider.conditional_delete_resource.await?;
Architecture Improvements: StandardResourceProvider simplified by ~500 lines through helper trait composition while maintaining full functionality.
Quick Start
Add to your Cargo.toml:
[]
= "=0.5.0"
= { = "1.0", = ["full"] }
= "1.0"
Create a basic SCIM server:
use ;
use json;
async
Key Features
- Type-Safe by Design - Leverage Rust's type system to prevent runtime errors
- Multi-Tenant Ready - Built-in support for multiple organizations/tenants
- Full SCIM 2.0 Compliance - Complete implementation of RFC 7643 and RFC 7644
- High Performance - Async-first with minimal overhead
- Framework Agnostic - Works with Axum, Warp, Actix, or any HTTP framework
- AI-Ready - Built-in Model Context Protocol for AI tool integration
- ETag Concurrency Control - Prevents lost updates in multi-client scenarios
How It Works
The SCIM Server acts as intelligent middleware that handles provisioning complexity:
Client Applications → SCIM Server → Your Storage Backend
- Clients: Web apps, AI assistants, CLI tools, custom integrations
- SCIM Server: Validation, schema management, multi-tenancy, concurrency control
- Storage: In-memory, database, cloud, or custom providers
Documentation
| Resource | Description |
|---|---|
| User Guide | Comprehensive tutorials and concepts |
| API Documentation | Detailed API reference with examples |
| Examples | Copy-paste starting points for common use cases |
| CHANGELOG | Version history and migration guides |
Learning Path
- Start Here: Follow the Quick Start above
- Learn Concepts: Read the User Guide
- See Examples: Browse examples/ for your use case
- API Reference: Check docs.rs for detailed API docs
Common Use Cases
use ;
// Multi-tenant server with proper configuration
let storage = new;
let provider = new;
let mut server = new
.with_base_url
.with_tenant_strategy
.build?;
// Register User and Group resource types
let user_schema = server.get_schema_by_id?;
let user_handler = create_user_resource_handler;
server.register_resource_type?;
let group_schema = server.get_schema_by_id?;
let group_handler = create_group_resource_handler;
server.register_resource_type?;
// Web framework integration (Axum example)
let app = new
.route
.layer;
See examples/ for complete working examples including:
- Basic CRUD operations with
StandardResourceProvider - Multi-tenant setups
- Web framework integrations
- Authentication patterns
- ETag concurrency control
- AI assistant integration
Storage Backends
The recommended approach is to use ScimServer with StandardResourceProvider and pluggable storage:
use ;
let storage = new;
let provider = new;
let mut server = new?;
// Register resource types for full SCIM compliance
let user_schema = server.get_schema_by_id?;
let user_handler = create_user_resource_handler;
server.register_resource_type?;
Contributing
We welcome contributions! Please see our User Guide for development information, or open an issue to discuss your ideas.
License
Licensed under the MIT License.
Need help? Check the User Guide or open an issue.