Est-ce que Paradigm permet l'approvisionnement automatique d'utilisateurs ?

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

  1. Le fournisseur d'identité (IdP) lance une demande SCIM pour créer un utilisateur sur le point de terminaison /Users
  2. Paradigm valide la demande et les données de l'utilisateur
  3. Un nouveau compte d'utilisateur est créé avec les autorisations par défaut
  4. Une réponse de succès est renvoyée à l'IdP

Déprovisionnement de l'utilisateur

  1. Le fournisseur d'identité (IdP) envoie une demande de désactivation ou de suppression d'un utilisateur
  2. Paradigm valide la demande
  3. Pour la désactivation : Le statut active de l'utilisateur est mis sur False
  4. 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)
  5. 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

  1. Mettre en œuvre des mises à jour incrémentales : Utiliser les opérations PATCH au lieu de PUT lorsque c'est possible
  2. Gérer les défaillances de l'API proprement : Implémentez une logique de retry avec un backoff exponentiel
  3. Maintenez la synchronisation IdP : Planifiez des synchronisations complètes régulières pour garantir la cohérence
  4. Sécurisez vos clés API : Effectuez une rotation régulière des jetons et stockez-les en toute sécurité.