Cet article explique comment Paradigm met en œuvre le protocole SCIM (System for Cross-domain Identity Management) pour permettre un approvisionnement et une gestion transparents des utilisateurs entre les systèmes.
Qu'est-ce que SCIM ?
SCIM (System for Cross-domain Identity Management) est une norme qui simplifie la gestion des utilisateurs dans les scénarios multi-domaines. Elle fournit un schéma et une API normalisés pour la création, la lecture, la mise à jour et la suppression des 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 à partir du panneau d'administration de Paradigm même si le provisionnement des utilisateurs avec SCIM est activé pour votre entreprise.
Détails de la mise en œuvre du SCIM
Version SCIM prise en charge
Paradigm prend en charge le protocole SCIM 2.0 (RFC 7642, RFC 7643 et RFC 7644).
Fournisseurs d'identité testés
Notre implémentation SCIM a été testée avec :
- Microsoft Entra ID
URL de base
Tous les points de terminaison du SCIM sont accessibles via :
https://[paradigm-domain]/scim/v2/
[paradigm-domain]
étant le nom de domaine sous lequel Paradigm est hébergé.
Pour la plate-forme Saas de LightOn, sa valeur serait https://paradigm.lighton.ai/scim/v2/
.
Authentification
Pour sécuriser l'API SCIM, nous avons mis en place une authentification par jeton à l'aide de notre backend d'authentification par clé API.
Chaque demande doit inclure un en-tête d'autorisation :
Authorization : Bearer {votre-paradigm-api-clé}
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 des utilisateurs appartenant à la même société que le propriétaire de la clé API, quel que soit le rôle de l'utilisateur.
Points de terminaison pris en charge
Voici les points de terminaison SCIM pris en charge par Paradigm, ainsi que leurs méthodes HTTP :
Point de terminaison | Méthode HTTP | Description |
/Users |
GET | Liste/recherche d'utilisateurs |
/Users |
POST | Créer un utilisateur |
/Users/{id} |
GET | Obtenir un utilisateur spécifique |
/Users/{id} |
PUT | Remplacer tous 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 des groupes via le point d'accès /Groups.
Attributs SCIM de l'utilisateur pris en charge
L'implémentation SCIM de Paradigm prend en charge les attributs utilisateur suivants :
Attributs de base
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, tel que « 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 électroniques, Paradigm ne prend en charge qu'une seule adresse électronique par utilisateur | Oui |
password |
Mot de passe en 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 des groupes
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 des membres | Non |
Gestion des erreurs
Les points d'extrémité de l'API SCIM de Paradigm renvoient des codes HTTP standard suivant le format d'erreur SCIM :
Code d'état | 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 au 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"
}
Workflow de provisionnement
Provisionnement de l'utilisateur
- Le fournisseur d'identité (IdP) lance une demande SCIM pour créer un utilisateur sur le point de terminaison
/Users
- Paradigm valide la demande et les données de l'utilisateur
- Un nouveau compte d'utilisateur est créé avec les autorisations par défaut
- Une réponse de succès est renvoyée à l'IdP
Déprovisionnement de l'utilisateur
- Le fournisseur d'identité (IdP) envoie une demande de désactivation ou de suppression d'un utilisateur
- Paradigm valide la demande
- Pour la désactivation : Le statut
active
de l'utilisateur est mis surFalse
- Pour la suppression : Le compte de l'utilisateur est anonymisé (toutes les données de l'utilisateur sont supprimées, à l'exception des données comportementales)
- Une réponse positive est renvoyée à l'IdP.
Toute autre demande SCIM concernant l'utilisateur anonymisé renverra une réponse HTTP 404 Not Found
.
Exemples de demandes/réponses API :
Création d'un 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 correspondante :
{
'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 demande :
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 le droit de gérer les utilisateurs.
- Vérifiez que l'en-tête d'autorisation est correctement formaté.
Bonnes pratiques
- Mettre en œuvre des mises à jour incrémentales : Utiliser les opérations PATCH au lieu de PUT lorsque c'est possible
- Gérer les défaillances de l'API proprement : Implémentez une logique de retry avec un backoff exponentiel
- Maintenez la synchronisation IdP : Planifiez des synchronisations complètes régulières pour garantir la cohérence
- Sécurisez vos clés API : Effectuez une rotation régulière des jetons et stockez-les en toute sécurité.