Aller au contenu
medium

SCIM : le provisioning automatique des identités

11 min de lecture

SCIM automatise le cycle de vie des comptes utilisateurs. Quand un collaborateur arrive, son compte est créé automatiquement dans toutes les applications. Quand il part, tous ses accès sont désactivés en quelques secondes — pas en quelques jours. Sans SCIM, vous gérez manuellement les comptes dans chaque application, avec les risques de sécurité et d’erreurs que cela implique.

Ce guide vous explique SCIM — le standard pour synchroniser automatiquement les identités entre l’IdP et les applications. À la fin, vous saurez :

  • Comprendre pourquoi SCIM est nécessaire (et ses alternatives)
  • Maîtriser les opérations SCIM : création, modification, désactivation
  • Configurer un offboarding propre (désactiver + révoquer)
  • Anticiper les pièges courants d’implémentation

Prérequis : avoir lu Les bases de l’IAM.

Sans provisioning automatique, voici ce qui se passe :

  1. Un employé arrive → création manuelle du compte dans chaque application
  2. L’employé change de service → modification manuelle des groupes
  3. L’employé part → on oublie de désactiver certains comptes

Résultat : des comptes orphelins qui persistent pendant des mois, voire des années. Un risque de sécurité majeur.

Le compte est créé au premier login via SSO (OIDC/SAML).

Comment ça marche :

  1. L’utilisateur se connecte pour la première fois
  2. L’application reçoit l’assertion SAML ou l’ID Token
  3. L’application crée le compte à partir des attributs reçus

Avantages :

  • Simple à mettre en place
  • Pas de synchronisation à maintenir

Limites :

  • Le compte n’existe qu’au premier login
  • Pas de pré-configuration (groupes, permissions spécifiques)
  • Pas de deprovisioning automatique

L’IdP pousse les changements vers les applications en temps réel.

Comment ça marche :

  1. Un utilisateur est créé/modifié/désactivé dans l’IdP
  2. L’IdP envoie une requête SCIM à l’application
  3. L’application applique le changement

Avantages :

  • Comptes pré-créés avant le premier login
  • Synchronisation des groupes et attributs
  • Deprovisioning automatique

Limites :

  • L’application doit supporter SCIM
  • Configuration plus complexe

SCIM (System for Cross-domain Identity Management) est défini par deux RFC :

  • RFC 7643 : Schéma SCIM (objets User, Group)
  • RFC 7644 : Protocole SCIM (API REST)

Architecture SCIM : l'IdP (SCIM Client) pousse les utilisateurs vers l'application (SCIM Server) via l'API REST

L’IdP agit comme SCIM Client (pousse les changements). L’application agit comme SCIM Server (reçoit et applique).

{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "2819c223-7f76-453a-919d-413861904646",
"externalId": "alice.martin",
"userName": "alice.martin@example.com",
"name": {
"givenName": "Alice",
"familyName": "Martin"
},
"emails": [
{
"value": "alice.martin@example.com",
"type": "work",
"primary": true
}
],
"active": true,
"groups": [
{
"value": "developers",
"display": "Developers Team"
}
],
"meta": {
"resourceType": "User",
"created": "2024-02-06T10:00:00Z",
"lastModified": "2024-02-06T10:00:00Z"
}
}
AttributDescription
idIdentifiant unique côté application
externalIdIdentifiant unique côté IdP
userNameIdentifiant de login (souvent l’email)
activeCompte actif ou désactivé
emailsListe des adresses email
groupsGroupes auxquels appartient l’utilisateur
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "group-123",
"displayName": "Developers Team",
"members": [
{
"value": "2819c223-7f76-453a-919d-413861904646",
"display": "Alice Martin"
}
]
}
OpérationMéthode HTTPEndpointUsage
CréerPOST/UsersNouvel employé
LireGET/Users/{id}Vérifier un compte
ListerGET/Users?filter=...Rechercher des utilisateurs
ModifierPUT/Users/{id}Remplacement complet
Modifier partiellementPATCH/Users/{id}Modification ciblée
SupprimerDELETE/Users/{id}Suppression (rare)

Créer un utilisateur :

Fenêtre de terminal
POST /scim/v2/Users
Content-Type: application/scim+json
Authorization: Bearer <token>
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "alice.martin@example.com",
"name": {
"givenName": "Alice",
"familyName": "Martin"
},
"emails": [{"value": "alice.martin@example.com", "primary": true}],
"active": true
}

Désactiver un utilisateur (PATCH) :

Fenêtre de terminal
PATCH /scim/v2/Users/2819c223-7f76-453a-919d-413861904646
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "active",
"value": false
}
]
}

Rechercher des utilisateurs :

Fenêtre de terminal
GET /scim/v2/Users?filter=userName eq "alice.martin@example.com"
  1. Création dans l’IdP

    Le RH crée l’utilisateur dans le système source (AD, Workday, HR system).

  2. Synchronisation vers l’IdP

    L’IdP central (Keycloak, Okta) reçoit l’utilisateur.

  3. Provisioning SCIM

    L’IdP pousse l’utilisateur vers les applications configurées.

  4. Confirmation

    Chaque application retourne un id SCIM que l’IdP stocke pour les futures mises à jour.

  1. Modification des groupes dans l’IdP

    L’utilisateur change d’équipe, ses groupes sont mis à jour.

  2. PATCH SCIM vers les applications

    L’IdP envoie les modifications de groupes.

  3. Mise à jour des permissions

    L’application ajuste les accès selon les nouveaux groupes.

  1. Désactivation dans l’IdP

    Le compte est marqué active: false dans l’IdP.

  2. PATCH SCIM : désactiver

    L’IdP envoie { "active": false } à toutes les applications.

  3. Révocation des tokens

    Les applications invalident les sessions et tokens existants.

  4. Blocage des logins

    L’IdP refuse toute nouvelle authentification.

Un offboarding “propre” doit garantir que :

  1. ✅ Le compte est désactivé (plus de nouveaux logins)
  2. ✅ Les sessions actives sont terminées
  3. ✅ Les tokens (access, refresh) sont révoqués
  4. ✅ Les accès API sont bloqués
  5. ✅ Les données sont conservées ou archivées selon la politique
ÉtapeAction IdPAction Application
1. Désactivationactive: false dans l’IdPSCIM PATCH reçu
2. SessionsN/AInvalider toutes les sessions du user
3. TokensRévoquer les refresh tokensSupprimer les tokens stockés
4. AuditLogger le deprovisioningLogger la désactivation
OptionQuand l’utiliser
ConserverConformité, historique, audit
AnonymiserRGPD, données personnelles
SupprimerDemande explicite, données non critiques
PiègeConséquenceSolution
L’app ne supporte pas SCIMProvisioning manuelVérifier avant intégration
externalId vs id confondusÉchec des mises à jourexternalId = IdP, id = application
DELETE au lieu de désactiverPerte d’historiqueToujours préférer active: false
Pas de révocation des sessionsAccès persistant après départImplémenter la révocation côté app
Mapping d’attributs incorrectDonnées manquantesTester le mapping en pre-prod

Keycloak ne supporte pas SCIM nativement, mais plusieurs extensions existent.

  1. Installer l’extension

    Fenêtre de terminal
    # Ajouter le provider SCIM à Keycloak
    cp scim-for-keycloak.jar /opt/keycloak/providers/
    /opt/keycloak/bin/kc.sh build
  2. Configurer le endpoint SCIM

    Dans Keycloak Admin → Realm Settings → SCIM

  3. Configurer l’application cliente

    Entrer l’URL SCIM de l’application et le token d’authentification

  4. Tester le provisioning

    Créer un utilisateur dans Keycloak et vérifier sa création dans l’application

Ces IdP supportent SCIM nativement :

  1. Ajouter l’application depuis le catalogue
  2. Activer le provisioning
  3. Entrer l’URL SCIM et le token de l’application
  4. Mapper les attributs
  5. Tester
ApprocheAvantagesInconvénientsUsage
SCIMStandard, temps réel, deprovisioningL’app doit le supporterSaaS modernes
JIT (SSO)Simple, pas de configPas de deprovisioningApps sans SCIM
LDAP syncRobuste, maturePlus complexe, pollingApps on-prem
API customFlexibleSur-mesure, maintenanceLegacy, cas spéciaux
ErreurConséquenceSolution
Pas de test de deprovisioningComptes orphelins au premier départTester le flow complet en pre-prod
Token SCIM en clairCompromission possibleStocker dans un vault
Pas de monitoringÉchecs silencieuxAlerter sur les erreurs SCIM
Mapping incompletAttributs manquantsDocumenter et valider le mapping

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.