Provisionnement

Canaille implémente partiellement le protocole de provisionnement SCIM, ce qui permet aux modifications sur les utilisateurs et les groupes d’être répandues à travers l’ensemble de votre écosystème d’applications.

Serveur de provisionnement

Canaille fonctionne comme un serveur de provisionnement. Cela signifie que les applications clientes peuvent effectuer des requêtes sur le terminal /scim/v2, en utilisant le protocole SCIM2, afin de manipuler des utilisateurs et des groupes.

Client de provisionnement

Canaille fonctionne aussi comme un client de provisionnement. Cela signifie que les modifications sur les utilisateurs et les groupes sont transmises aux applications clientes implémentant la spécification serveur SCIM2. Cela permet de s’assurer que les utilisateurs et les groupes sont toujours synchronisés dans toutes vos applications clientes.

Les modifications sont envoyées aux applications clientes, qu’elles viennent de l’interface web, de la ligne de commandes ou bien d’une autre application cliente effectuant une requête sur l’API SCIM de Canaille.

Canaille va tenter de s’authentifier sur le terminal d’API SCIM2 des applications clientes avec un jeton d’authentification que Canaille aura émis au nom du client. Veuillez vous assurer que vos applications clientes sont correctement configurées pour accepter les jetons provenant de Canaille.

Avertissement

Notez que la fonctionnalité de client SCIM en est à un stade de développement peu avancé, et vient avec des performances limitées pour le moment.

À faire

Certaines fonctionnalités et terminaux de SCIM ne sont pas implémentées. En plus de celles-ci, Canaille implémentera dans le future :

  • Contrôle d’accès pour les clients sur le terminal API de SCIM, pour gérer finement les droits en fonction des clients.

  • Implémentation côté client, pour envoyer les modification d’utilisateur et de groupes à tous les clients.

Configuration

To allow clients to access the SCIM API, the client must have the client_credentials grant type configured. This allows clients to ask an authentication token on their own behalf and use this token to perform queries. User tokens are also supported: users with appropriate permissions can access SCIM endpoints, and the /Me endpoint allows authenticated users to manage their own resource.

Alors le paramètre de configuration CANAILLE_SCIM.ENABLE_SERVER doit être activé.

...
[CANAILLE_SCIM]
ENABLE_SERVER = true

Afin d’activer la fonctionnalité de client SCIM et de répandre les modifications aux applications clientes, le paramètre de configuration CANAILLE_SCIM.ENABLE_CLIENT doit être activé.

...
[CANAILLE_SCIM]
ENABLE_CLIENT = true

Détails d’implémentation

Pour des raisons techniques, les implémentations côté serveur des ressources User et Group diffèrent subtilement entre Canaille et la RFC7643 :

  • User.userName est immuable (tandis qu’il est en lecture-écriture dans la RFC7643).

  • User.name.familyName est requis (tandis qu’il est optionnel dans la RFC7643).

  • Group.displayName est requis (tandis qu’il est optionnel dans la RFC7643).

  • Group.members est requis (tandis qu’il est optionnel dans la RFC7643), c’est à dire que les groupes ne peuvent être vides.

Débogage

Afin de vérifier les données exposées par l’API SCIM de Canaille, vous aurez besoin d’un jeton client et d’une application SCIM cliente. Afin de générer un jeton, vous pouvez simplement en créer un manuellement avec le bouton présent sur la page d’administration des clients. Enfin, nous vous recommandons l’utilisation de scim2-cli pour interagir avec l’API :

Exemple d’utilisation de scim2-cli
 $ pip install scim2-cli
 $ export SCIM_CLI_URL="https://canaille.example/scim/v2"
 $ export SCIM_CLI_HEADERS="Authorization: Bearer <MY_CLIENT_TOKEN>"
 $ scim query user bjensen
 {
     "schemas": [
         "urn:ietf:params:scim:schemas:core:2.0:User",
         "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
     ],
     "id": "bjensen",
     "meta": {
         "resourceType": "User",
         "created": "2024-12-05T16:08:51.896646Z",
         "lastModified": "2024-12-05T16:08:51.896646Z",
         "location": "http://scim.example/v2/Users/bjensen",
         "version": "W/\"637b1ce03c010cd55fe45b6f7be2247b5159b135\""
     },
     "userName": "bjensen@example.com"
 }