Aller au contenu

Référence SCIM 2.0

Référence technique destinée aux équipes de gestion des identités qui connectent un IdP (Microsoft Entra ID, SailPoint IdentityIQ, …) à mTime : quels attributs et quelles opérations SCIM 2.0 mTime prend en charge, et ce que fait chacun d’eux.

Vue d’ensemble

URL de basehttps://<your mTime host>/api/scim/v2
NormesRFC 7643 (schéma), RFC 7644 (protocole)
AuthentificationJeton bearer : une clé API de l’utilisateur de service de provisionnement de l’espace de travail (voir Configurer SCIM avec Microsoft Entra ID)
Type de médiaapplication/scim+json
Ressources/Users, /Groups
ErreursRéponses d’erreur SCIM (RFC 7644 §3.12)

Ce que SCIM gère, et ce qu’il ne gère pas

mTime sépare l’utilisateur (connexion, rôles, accès) de l’employé et de ses emplois :

Utilisateur → Employé → n emplois

SCIM gère l’utilisateur : qui peut se connecter, sous quel nom et avec quels rôles. Les employés et leurs emplois — unité organisationnelle, responsable, conditions d’emploi, norme de temps de travail, dates de début et de fin — sont des données datées sur lesquelles mTime fait ses calculs ; elles proviennent de votre intégration RH, pas de SCIM. Un utilisateur SCIM est relié à son employé par l’externalId (voir Comment les utilisateurs sont provisionnés).

C’est pourquoi mTime ne prend pas en charge l’Enterprise User Extension : department, manager et employeeNumber y sont des valeurs uniques sans date de validité, alors qu’un employé dans mTime peut avoir plusieurs emplois datés.

Utilisateurs

Attributs

Schéma urn:ietf:params:scim:schemas:core:2.0:User.

AttributLectureCréationMise à jourRemarques
id✅——Attribué par mTime, non modifiable
externalId✅✅✅Clé stable (par ex. le matricule), unique dans l’espace de travail ; un doublon renvoie 409 uniqueness. Peut être lié à un attribut d’employé pour la correspondance
userName✅✅⚠️L’adresse e-mail de l’utilisateur. Modifiable uniquement tant que l’utilisateur n’a pas encore activé son invitation
emails✅✅⚠️La valeur principale (ou la première) est utilisée ; même règle que pour userName. Renvoyé sous la forme d’une seule adresse principale
name.givenName, name.familyName❌✅⚠️Combinés pour former le nom complet — uniquement s’ils sont envoyés ensemble (dans un même objet name, ou les deux chemins dans le même PATCH). mTime enregistre un seul nom complet et ne le découpe jamais : un PATCH qui n’en contient qu’un est ignoré. À la création et en PUT, un prénom ou un nom de famille seul n’est utilisé qu’en l’absence de name.formatted et de displayName. Non renvoyés en lecture : le nom est renvoyé dans name.formatted
name.formatted✅✅⚠️Nom complet ; prime sur le prénom et le nom de famille. Une modification n’a aucun effet visible pour un utilisateur lié à un employé, sauf si l’IdP nomme les employés — voir Quel nom SCIM définit
displayName✅✅⚠️Nom complet. Même règle de modification que name.formatted
active✅—✅false suspend l’utilisateur ; true le réactive
meta.resourceType, meta.location✅——

Tous les autres attributs Core User (nickName, title, phoneNumbers, addresses, password, …) et l’Enterprise User Extension (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User) ne sont pas pris en charge : ils sont ignorés à la création et à la mise à jour, et ne sont jamais renvoyés.

Quel nom SCIM définit

mTime affiche un seul nom pour une personne : celui de l’employé quand l’utilisateur est lié à un employé, sinon celui de l’utilisateur.

  • Un utilisateur lié à un employé affiche le nom de l’employé, que votre intégration RH tient à jour. Par défaut, SCIM ne met pas à jour un employé existant : un nom envoyé par SCIM n’a donc aucun effet visible pour cet utilisateur. Si le paramètre Utiliser les noms du fournisseur d'identité comme noms d'employés est activé, chaque création, PUT ou PATCH qui contient un nom l’écrit aussi sur l’employé lié — voir Utiliser le nom du fournisseur d’identité pour les employés.
  • Un utilisateur sans employé (par ex. un brouillon) affiche son propre nom. SCIM le définit à la création et peut le modifier tant que la personne n’a pas activé son invitation ; ensuite, il suit le nom de son compte mTime. Si un rôle crée plus tard son employé, celui-ci reprend ce nom au départ.

Pour renommer un employé, changez le nom dans votre système RH — ou dans votre IdP si ce paramètre est activé.

Opérations

OpérationPrise en chargeComportement
POST /Users✅Crée l’utilisateur au statut invité et envoie l’e-mail d’invitation. Une adresse e-mail est obligatoire (emails, ou userName lorsqu’il s’agit d’une adresse). Relie l’utilisateur à un employé existant s’il y en a un qui correspond ; sinon, crée un brouillon sans rôle, sans employé et sans invitation. 409 si l’externalId ou l’employé est déjà pris
GET /Users/{id}✅
GET /Users?filter=…⚠️Uniquement attribute eq "value", sur userName ou externalId. Les autres attributs ou opérateurs renvoient 400. Se combine avec la pagination
GET /Users (sans filtre)✅Tous les utilisateurs, page par page — voir Pagination
PUT /Users/{id}✅Applique les attributs pris en charge ci-dessus
PATCH /Users/{id}⚠️add et replace sur active, userName, emails, displayName, name (objet), name.givenName, name.familyName, name.formatted, externalId, ou sans chemin (ressource partielle). Un chemin peut porter le préfixe du schéma (urn:ietf:params:scim:schemas:core:2.0:User:name.givenName). remove et les autres chemins sont ignorés
DELETE /Users/{id}✅Supprime le compte utilisateur (suppression douce) et met fin à toutes ses sessions. L’employé et son historique sont conservés. Renvoie 204

Les utilisateurs qui détiennent le rôle owner ne peuvent être ni modifiés ni supprimés via SCIM (403).

Désactiver ou supprimer ?

PATCH active=falseDELETE
Peut se connecterNon — les sessions prennent fin immédiatementNon — les sessions prennent fin immédiatement
Compte utilisateurConservé, statut suspenduSupprimé (suppression douce)
Employé, enregistrements du temps, approbationsConservésConservés
RetourPATCH active=true rétablit le même utilisateurUn nouveau POST crée un nouvel utilisateur, relié au même employé

Groupes

Les groupes correspondent aux rôles mTime : l’IdP décide de l’existence d’un groupe et de ses membres, les administrateurs mTime décident des permissions du rôle. Voir Comment les groupes deviennent des rôles.

Attributs

Schéma urn:ietf:params:scim:schemas:core:2.0:Group.

AttributLectureCréationMise à jourRemarques
id✅——Attribué par mTime
externalId✅✅✅
displayName✅✅✅Lie le groupe au rôle portant le même nom, ou crée un rôle personnalisé vide. Renommer le groupe renomme le rôle
members (value, display)✅✅✅value est l’id SCIM de l’utilisateur

Opérations

OpérationPrise en chargeComportement
POST /Groups✅Lie le groupe au rôle ou crée le rôle
GET /Groups/{id}✅
GET /Groups?filter=…⚠️Uniquement attribute eq "value", sur displayName ou externalId
GET /Groups (sans filtre)✅Tous les rôles gérés par l’IdP, page par page — voir Pagination
PUT /Groups/{id}✅Remplace le nom et les membres
PATCH /Groups/{id}✅add, replace et remove sur members (y compris members[value eq "…"]) et displayName
DELETE /Groups/{id}✅Retire le rôle à ses membres. Le rôle lui-même n’est supprimé que si aucun administrateur ne l’a jamais configuré

Pagination

GET /Users et GET /Groups prennent en charge la pagination par index (RFC 7644 §3.4.2.4), avec ou sans filtre.

ParamètrePar défautRemarques
startIndex1Position (à partir de 1) du premier résultat. Une valeur inférieure à 1 vaut 1
count200Résultats par page, 200 au maximum. count=0 ne renvoie que totalResults

La réponse indique totalResults (toutes les correspondances), startIndex et itemsPerPage (les résultats de cette page). Demandez la page suivante avec startIndex + itemsPerPage jusqu’à obtenir totalResults résultats. L’ordre des résultats est fixe : les pages ne sautent ni ne répètent aucun résultat, sauf si des utilisateurs ou des groupes sont créés ou supprimés entre-temps.

Points de terminaison de découverte

Les trois exigent le même jeton bearer que les autres points de terminaison SCIM.

Point de terminaisonContenu
GET /ServiceProviderConfigCapacités, présentées ci-dessous
GET /SchemasSchémas Core User et Group, limités aux attributs ci-dessus
GET /ResourceTypesUser (/Users) et Group (/Groups), sans extensions de schéma
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"],
  "documentationUri": "https://help.mtime.app",
  "patch": { "supported": true },
  "bulk": { "supported": false, "maxOperations": 0, "maxPayloadSize": 0 },
  "filter": { "supported": true, "maxResults": 200 },
  "changePassword": { "supported": false },
  "sort": { "supported": false },
  "etag": { "supported": false },
  "authenticationSchemes": [
    {
      "type": "oauthbearertoken",
      "name": "OAuth Bearer Token",
      "description": "Bearer token issued for the workspace's provisioning service user",
      "primary": true
    }
  ]
}

Dépannage

ProblèmeSolution
400 Unsupported filterUtilisez eq sur userName ou externalId (utilisateurs), ou sur displayName ou externalId (groupes)
409 uniqueness à la créationUn autre utilisateur a déjà cet externalId, ou l’employé a déjà un utilisateur. Recherchez l’utilisateur avec filter=externalId eq "…" et mettez-le à jour plutôt que de le recréer
Un changement de prénom ou de nom de famille n’apparaît pasmTime enregistre un seul nom complet et ne le découpe jamais : il ne peut pas en modifier une seule partie. Envoyez givenName et familyName ensemble dans le même PATCH, ou envoyez name.formatted ou displayName
Un changement de nom venant de l’IdP n’apparaît pasC’est attendu pour un utilisateur lié à un employé tant que Utiliser les noms du fournisseur d'identité comme noms d'employés est désactivé : le nom affiché est celui de l’employé, qui provient de votre intégration RH. Activez ce paramètre si l’IdP doit définir les noms des employés — voir Quel nom SCIM définit
Un changement d’adresse e-mail n’apparaît pasL’utilisateur a déjà activé son compte ; son adresse e-mail de connexion n’est plus gérée par le provisionnement
403 sur un utilisateurL’utilisateur est propriétaire de l’espace de travail, ce que SCIM ne peut pas gérer