Cet article explique comment Paradigm implémente le protocole SCIM (System for Cross-domain Identity Management) pour permettre le provisioning et la gestion transparente des utilisateurs entre systèmes.
Qu’est-ce que SCIM ?
SCIM (System for Cross-domain Identity Management) est une norme ouverte qui simplifie la gestion des utilisateurs dans des scénarios multi-domaines. Elle fournit un schéma standardisé et une API pour créer, lire, mettre à jour et supprimer les données d’identité entre les fournisseurs d’identité et les fournisseurs de services.
Veuillez noter que les modifications sur les utilisateurs sont toujours possibles depuis le panneau d’administration Paradigm même si vous avez le provisioning d’utilisateurs avec SCIM activé pour votre entreprise.
Détails de l’Implémentation SCIM
Version SCIM Prise en Charge
Paradigm prend en charge SCIM 2.0 (RFC 7642, RFC 7643 et RFC 7644).
Fournisseurs d’Identité Testés
Notre implémentation SCIM a été testée avec :
URL de Base
Tous les endpoints SCIM sont accessibles via :
https://[paradigm-domain]/scim/v2/
Avec [paradigm-domain]
étant le nom de domaine sous lequel Paradigm est hébergé. Pour la plateforme Saas de LightOn, sa valeur serait https://paradigm.lighton.ai/scim/v2/
.
Authentification
Pour sécuriser l’API SCIM, nous avons implémenté une authentification basée sur des jetons utilisant notre backend d’authentification de clé API.
Chaque requête doit inclure un en-tête d’autorisation :
Authorization: Bearer {your-paradigm-api-key}
Vous pouvez générer et gérer les clés API dans le Panneau d’Administration sous Paramètres API.
Une clé API Paradigm ne peut être utilisée que pour gérer les utilisateurs faisant partie de la même entreprise que le propriétaire de la clé API, quel que soit le rôle de l’utilisateur.
Endpoints Pris en Charge
Voici les endpoints SCIM pris en charge par Paradigm avec leurs méthodes HTTP :
Endpoint | Méthode HTTP | Description |
---|
/Users | GET | Lister/rechercher des utilisateurs |
/Users | POST | Créer un utilisateur |
/Users/{id} | GET | Obtenir un utilisateur spécifique |
/Users/{id} | PUT | Remplacer les attributs d’un utilisateur |
/Users/{id} | PATCH | Mettre à jour les attributs d’un utilisateur |
/Users/{id} | DELETE | Supprimer un utilisateur (Anonymisation pour Paradigm) |
/Groups | GET | Lister/rechercher des groupes |
Il n’est actuellement pas possible de gérer les groupes via l’endpoint /Groups
.
Attributs SCIM Utilisateur Pris en Charge
L’implémentation SCIM de Paradigm prend en charge les attributs utilisateur suivants :
Attributs Principaux
Attribut | Description | Requis |
---|
userName | Identifiant unique pour l’utilisateur | Oui |
name.givenName | Prénom | Non |
name.familyName | Nom de famille | Non |
title | Titre de l’utilisateur, comme “Vice Président” | Non |
preferredLanguage | Indique la langue écrite ou parlée préférée de l’utilisateur | Non |
active | Booléen indiquant si l’utilisateur est actif | Non |
emails | Adresses e-mail, Paradigm ne prend en charge qu’une seule adresse e-mail par utilisateur | Oui |
password | Mot de passe en texte clair de l’utilisateur. Cet attribut est destiné à être utilisé pour spécifier un mot de passe initial lors de la création d’un nouvel utilisateur ou pour réinitialiser le mot de passe d’un utilisateur existant. | Non |
Schéma de Groupe
L’implémentation SCIM de Paradigm prend en charge les attributs de groupe suivants :
Attribut | Description | Requis |
---|
displayName | Nom du groupe | Oui |
members | Liste des références de membres | Non |
Gestion des Erreurs
Les endpoints de l’API SCIM Paradigm retournent des codes HTTP standard suivant le format d’erreur SCIM :
Code de Statut | Description |
---|
200 | Opération réussie |
201 | Ressource créée avec succès |
400 | Mauvaise requête (erreur de validation) |
401 | Non autorisé (erreur d’authentification) |
403 | Interdit (erreur d’autorisation) |
404 | Ressource non trouvée |
409 | Conflit avec une ressource existante |
500 | Erreur interne du serveur |
Voici un exemple de réponse d’erreur :
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "400",
"detail": "Attribute 'userName' is required"
}
Flux de Provisioning
Provisioning d’Utilisateur
- Le Fournisseur d’Identité (IdP) initie une requête SCIM pour créer un utilisateur sur l’endpoint
/Users
- Paradigm valide la requête et les données utilisateur
- Un nouveau compte utilisateur est créé avec les permissions par défaut
- Une réponse de succès est retournée à l’IdP
Dé-provisioning d’Utilisateur
- Le Fournisseur d’Identité (IdP) envoie une requête pour désactiver ou supprimer un utilisateur
- Paradigm valide la requête
- Pour la désactivation : Le statut
active
de l’utilisateur est défini sur false
- Pour la suppression : Le compte utilisateur est anonymisé (Toutes les données utilisateur sont supprimées mais les données comportementales sont conservées)
- Une réponse de succès est retournée à l’IdP
Toute requête SCIM ultérieure sur l’utilisateur anonymisé retournera une réponse HTTP 404 Not Found
.
Exemples de requête/réponse API
Création d’Utilisateur
Exemple de données de requête :
POST /api/scim/v2/Users
Authorization: Bearer {your-paradigm-api-key}
Content-Type: application/json
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "john.doe@example.com",
"externalId": "ccb1c352-d321-4027-9d17-de03d8d28b2f",
"name": {
"givenName": "John",
"familyName": "Doe"
},
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
],
"password": "fake-password-value",
"title": "Software Engineer",
"preferredLanguage": "fr-Latn-CA"
}
Réponse associée :
{
'schemas': ['urn:ietf:params:scim:schemas:core:2.0:User'],
'id': '4',
'externalId': 'ccb1c352-d321-4027-9d17-de03d8d28b2f',
'userName': 'john.doe@example.com',
'name': {
'givenName': 'John',
'familyName': 'Doe',
'formatted': 'John Doe'
},
'displayName': 'John Doe',
'emails': [
{
'value': 'john.doe@example.com',
'primary': True
}
],
'active': True,
'title': 'Software Engineer',
'preferredLanguage': 'fr',
'groups': [],
'meta': {
'resourceType': 'User',
'created': '2025-04-18T08:43:17.679804+00:00',
'lastModified': '2025-04-18T08:43:17.679804+00:00',
'location': 'http://testserver/scim/v2/Users/4'
}
}
Mise à Jour d’un Utilisateur
Exemple de données de requête :
PATCH /api/scim/v2/Users/a1b2c3d4
Authorization: Bearer {your-paradigm-api-key}
Content-Type: application/json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "name.givenName",
"value": "Jonathan"
},
{
"op": "replace",
"path": "title",
"value": "Senior Software Engineer"
}
]
}
Dépannage
Échecs d’Authentification
- Vérifiez que votre clé API est valide et n’a pas expiré
- Vérifiez que le propriétaire de la clé API a les permissions pour gérer les utilisateurs
- Assurez-vous que l’en-tête Authorization est correctement formaté
Bonnes Pratiques
- Implémenter des Mises à Jour Incrémentales : Utilisez les opérations PATCH au lieu de PUT quand c’est possible
- Gérer les Échecs d’API avec Élégance : Implémentez une logique de retry avec backoff exponentiel
- Maintenir la Synchronisation IdP : Planifiez des synchronisations complètes régulières pour assurer la cohérence
- Sécuriser Vos Clés API : Effectuez une rotation régulière des jetons et stockez-les de manière sécurisée