Passer au contenu principal
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 :
  • Microsoft Entra ID

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 :
EndpointMéthode HTTPDescription
/UsersGETLister/rechercher des utilisateurs
/UsersPOSTCréer un utilisateur
/Users/{id}GETObtenir un utilisateur spécifique
/Users/{id}PUTRemplacer les attributs d’un utilisateur
/Users/{id}PATCHMettre à jour les attributs d’un utilisateur
/Users/{id}DELETESupprimer un utilisateur (Anonymisation pour Paradigm)
/GroupsGETLister/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
AttributDescriptionRequis
userNameIdentifiant unique pour l’utilisateurOui
name.givenNamePrénomNon
name.familyNameNom de familleNon
titleTitre de l’utilisateur, comme “Vice Président”Non
preferredLanguageIndique la langue écrite ou parlée préférée de l’utilisateurNon
activeBooléen indiquant si l’utilisateur est actifNon
emailsAdresses e-mail, Paradigm ne prend en charge qu’une seule adresse e-mail par utilisateurOui
passwordMot 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 :
AttributDescriptionRequis
displayNameNom du groupeOui
membersListe des références de membresNon

Gestion des Erreurs

Les endpoints de l’API SCIM Paradigm retournent des codes HTTP standard suivant le format d’erreur SCIM :
Code de StatutDescription
200Opération réussie
201Ressource créée avec succès
400Mauvaise requête (erreur de validation)
401Non autorisé (erreur d’authentification)
403Interdit (erreur d’autorisation)
404Ressource non trouvée
409Conflit avec une ressource existante
500Erreur 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

  1. Le Fournisseur d’Identité (IdP) initie une requête SCIM pour créer un utilisateur sur l’endpoint /Users
  2. Paradigm valide la requête et les données utilisateur
  3. Un nouveau compte utilisateur est créé avec les permissions par défaut
  4. Une réponse de succès est retournée à l’IdP

Dé-provisioning d’Utilisateur

  1. Le Fournisseur d’Identité (IdP) envoie une requête pour désactiver ou supprimer un utilisateur
  2. Paradigm valide la requête
  3. Pour la désactivation : Le statut active de l’utilisateur est défini sur false
  4. Pour la suppression : Le compte utilisateur est anonymisé (Toutes les données utilisateur sont supprimées mais les données comportementales sont conservées)
  5. 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

  1. Implémenter des Mises à Jour Incrémentales : Utilisez les opérations PATCH au lieu de PUT quand c’est possible
  2. Gérer les Échecs d’API avec Élégance : Implémentez une logique de retry avec backoff exponentiel
  3. Maintenir la Synchronisation IdP : Planifiez des synchronisations complètes régulières pour assurer la cohérence
  4. Sécuriser Vos Clés API : Effectuez une rotation régulière des jetons et stockez-les de manière sécurisée
I