This is an example WSGI-SCIM server using scim2-models. It utilizes werkzeug and scim2-filter-parser and keeps all resources in-memory, they are lost once the process exits.
- Discovery endpoints (
/v2/ServiceProviderConfig,/v2/ResourceTypes,/v2/Schemas) - Create/Read/Update/Delete resources (
POST,GET,PUT,DELETE) - Searching & Filtering
- Support for ETags
- Unique Constraints
- HTTP PATCH (Add/Remove/Replace)
- Sorting
The only optional feature currently missing is support for Bulk operations (RFC 7644, Section 3.7).
$ scim2-server [-h] [--schema SCHEMA] [--resource-type RESOURCE_TYPE] [--bearer-token BEARER_TOKEN] [--hostname HOSTNAME] [--port PORT] [--reverse-proxy] [--dump-resources DUMP_RESOURCES]-h/--help: Show help message--reverse-proxy: Allow using the provider behind a Reverse Proxy (required for URL rewriting).--schema: Register schemas from specified JSON file. If not provided, loads the default schemas from RFC 7643.--resource-type: Register resource types from specified JSON file. If not provided, loads the default resource types from RFC 7643.--bearer-token: Registers a bearer token that can be used for accessing the service. If no tokens are provided, anonymous access without authentication is allowed.--hostname: The hostname to listen on. Defaults to127.0.0.1.--port: The port to listen on. Defaults to8080.--dump-resources: Dump a JSON document containing all resources when the provider exits normally.
This provider can be used as a starting point if you want to implement a SCIM provider. You should probably change the following things, if you want to use it in production:
- Use a proper production WSGI server instead of the one provided by Werkzeug
- Implement your own Backend as a subclass of
scim2_server.backend.Backend - Implement proper authorization with OAuth instead of public access or static bearer tokens
- Support the
/Meendpoint, if it applies in your use case - Add support for using either a static URL prefix or improve the support for usage behind a reverse proxy
The provider in its current state has been tested successfully against a live Microsoft Entra system as well as a live Okta system.
Parts of this software were initially developed at CONTACT Software (GitHub) and subsequently made available under the Apache License Version 2.0.