Riferimento SCIM 2.0
Riferimento tecnico per i team di gestione delle identità che collegano un IdP (Microsoft Entra ID, SailPoint IdentityIQ, …) a mTime: quali attributi e operazioni SCIM 2.0 mTime supporta e cosa fa ciascuno di essi.
Panoramica
| URL di base | https://<your mTime host>/api/scim/v2 |
| Standard | RFC 7643 (schema), RFC 7644 (protocollo) |
| Autenticazione | Bearer token: una chiave API dell’utente di servizio di provisioning dell’area di lavoro (vedi Configurare SCIM con Microsoft Entra ID) |
| Media type | application/scim+json |
| Risorse | /Users, /Groups |
| Errori | Risposte di errore SCIM (RFC 7644 §3.12) |
Cosa gestisce SCIM, e cosa no
mTime separa l’utente (login, ruoli, accessi) dal dipendente e dai suoi rapporti di lavoro:
Utente → Dipendente → n rapporti di lavoro
SCIM gestisce l’utente: chi può accedere, con quale nome e con quali ruoli. Dipendenti e rapporti di lavoro — unità organizzativa, responsabile, condizioni di impiego, norma orario di lavoro, date di inizio e di fine — sono dati con una data di validità su cui mTime esegue i calcoli, e provengono dalla tua integrazione HR, non da SCIM. Un utente SCIM viene collegato al suo dipendente tramite l’externalId (vedi Come avviene il provisioning degli utenti).
Per questo mTime non supporta l’Enterprise User Extension: department, manager ed employeeNumber sono valori singoli senza data di validità, mentre in mTime un dipendente può avere più rapporti di lavoro, ciascuno con le proprie date.
Utenti
Attributi
Schema urn:ietf:params:scim:schemas:core:2.0:User.
| Attributo | Lettura | Creazione | Aggiornamento | Note |
|---|---|---|---|---|
id | ✅ | — | — | Assegnato da mTime, non modificabile |
externalId | ✅ | ✅ | ✅ | Chiave stabile (ad es. il numero dipendente), univoca nell’area di lavoro; un duplicato restituisce 409 uniqueness. Può essere collegato a un attributo dipendente per l’abbinamento |
userName | ✅ | ✅ | ⚠️ | L’indirizzo e-mail dell’utente. Modificabile solo finché l’utente non ha ancora attivato il proprio invito |
emails | ✅ | ✅ | ⚠️ | Viene usato il valore primario (o il primo); stessa regola di userName. Restituito come un unico indirizzo e-mail primario |
name.givenName, name.familyName | ❌ | ✅ | ⚠️ | Combinati nel nome completo — solo se inviati insieme (in un unico oggetto name, o entrambi i path nello stesso PATCH). mTime memorizza un unico nome completo e non lo suddivide mai, quindi un PATCH con uno solo dei due viene ignorato. In creazione e con PUT, un nome o un cognome da solo viene usato solo se mancano name.formatted e displayName. Non restituiti in lettura: il nome viene restituito come name.formatted |
name.formatted | ✅ | ✅ | ⚠️ | Nome completo; ha la precedenza su nome e cognome. Una modifica non ha effetti visibili per un utente collegato a un dipendente, a meno che l’IdP non dia il nome ai dipendenti — vedi Quale nome imposta SCIM |
displayName | ✅ | ✅ | ⚠️ | Nome completo. Stessa regola di modifica di name.formatted |
active | ✅ | — | ✅ | false sospende l’utente; true lo riattiva |
meta.resourceType, meta.location | ✅ | — | — |
Tutti gli altri attributi Core User (nickName, title, phoneNumbers, addresses, password, …) e l’Enterprise User Extension (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User) non sono supportati: vengono ignorati in creazione e aggiornamento e non vengono mai restituiti.
Quale nome imposta SCIM
mTime mostra un solo nome per una persona: quello del dipendente quando l’utente è collegato a un dipendente, altrimenti quello dell’utente.
- Un utente collegato a un dipendente mostra il nome del dipendente, che la tua integrazione HR mantiene aggiornato. Per impostazione predefinita SCIM non aggiorna un dipendente esistente, quindi un nome inviato tramite SCIM non ha effetti visibili per questo utente. Con Usa i nomi del provider di identità come nomi dei dipendenti
attivata, ogni creazione,
PUToPATCHche contiene un nome lo scrive anche sul dipendente collegato — vedi Usare il nome del provider di identità per i dipendenti. - Un utente senza dipendente (ad es. una bozza) mostra il proprio nome utente. SCIM lo imposta alla creazione e può modificarlo finché la persona non attiva l’invito; poi segue il nome dell’account mTime della persona. Se in seguito un ruolo crea il suo dipendente, questo parte con questo nome.
Per rinominare un dipendente, cambia il nome nel sistema HR — oppure nell’IdP, se quell’impostazione è attivata.
Operazioni
| Operazione | Supportata | Comportamento |
|---|---|---|
POST /Users | ✅ | Crea l’utente come invitato e invia l’e-mail di invito. È obbligatorio un indirizzo e-mail (emails, oppure userName quando è un indirizzo). Collega l’utente a un dipendente esistente quando ce n’è uno corrispondente; altrimenti crea una bozza senza ruolo, senza dipendente e senza invito. 409 se l’externalId o il dipendente è già in uso |
GET /Users/{id} | ✅ | |
GET /Users?filter=… | ⚠️ | Solo attribute eq "value", su userName o externalId. Altri attributi o operatori restituiscono 400. Si combina con la paginazione |
GET /Users (senza filtro) | ✅ | Tutti gli utenti, pagina per pagina — vedi Paginazione |
PUT /Users/{id} | ✅ | Applica gli attributi supportati elencati sopra |
PATCH /Users/{id} | ⚠️ | add e replace su active, userName, emails, displayName, name (oggetto), name.givenName, name.familyName, name.formatted, externalId, oppure senza path (risorsa parziale). Un path può avere il prefisso dello schema (urn:ietf:params:scim:schemas:core:2.0:User:name.givenName). remove e gli altri path vengono ignorati |
DELETE /Users/{id} | ✅ | Elimina l’account utente (eliminazione soft) e chiude tutte le sessioni. Il dipendente e la sua cronologia vengono conservati. Restituisce 204 |
Gli utenti con il ruolo owner non possono essere modificati né eliminati tramite SCIM (403).
Disattivare o eliminare?
PATCH active=false | DELETE | |
|---|---|---|
| Può accedere | No — le sessioni si chiudono immediatamente | No — le sessioni si chiudono immediatamente |
| Account utente | Conservato, stato sospeso | Eliminato (eliminazione soft) |
| Dipendente, registrazioni ore, approvazioni | Conservati | Conservati |
| Ritorno | PATCH active=true ripristina lo stesso utente | Un nuovo POST crea un nuovo utente, collegato allo stesso dipendente |
Gruppi
I gruppi corrispondono ai ruoli mTime: l’IdP decide se un gruppo esiste e chi ne fa parte, gli amministratori mTime decidono le autorizzazioni del ruolo. Vedi Come i gruppi diventano ruoli.
Attributi
Schema urn:ietf:params:scim:schemas:core:2.0:Group.
| Attributo | Lettura | Creazione | Aggiornamento | Note |
|---|---|---|---|---|
id | ✅ | — | — | Assegnato da mTime |
externalId | ✅ | ✅ | ✅ | |
displayName | ✅ | ✅ | ✅ | Collega il gruppo al ruolo con lo stesso nome, oppure crea un ruolo personalizzato vuoto. Rinominare il gruppo rinomina il ruolo |
members (value, display) | ✅ | ✅ | ✅ | value è l’id SCIM dell’utente |
Operazioni
| Operazione | Supportata | Comportamento |
|---|---|---|
POST /Groups | ✅ | Collega il gruppo al ruolo o crea il ruolo |
GET /Groups/{id} | ✅ | |
GET /Groups?filter=… | ⚠️ | Solo attribute eq "value", su displayName o externalId |
GET /Groups (senza filtro) | ✅ | Tutti i ruoli gestiti dall’IdP, pagina per pagina — vedi Paginazione |
PUT /Groups/{id} | ✅ | Sostituisce nome e membri |
PATCH /Groups/{id} | ✅ | add, replace e remove su members (incluso members[value eq "…"]) e displayName |
DELETE /Groups/{id} | ✅ | Rimuove il ruolo dai suoi membri. Il ruolo stesso viene eliminato solo se nessun amministratore lo ha mai configurato |
Paginazione
GET /Users e GET /Groups supportano la paginazione basata su indice (RFC 7644 §3.4.2.4), con o senza filtro.
| Parametro | Predefinito | Note |
|---|---|---|
startIndex | 1 | Posizione (a partire da 1) del primo risultato. I valori inferiori a 1 valgono 1 |
count | 200 | Risultati per pagina, al massimo 200. count=0 restituisce solo totalResults |
La risposta indica totalResults (tutte le corrispondenze), startIndex e itemsPerPage (i risultati di questa pagina). Richiedi la pagina successiva con startIndex + itemsPerPage finché non hai totalResults risultati. I risultati arrivano in un ordine fisso, quindi le pagine non saltano né ripetono risultati, a meno che nel frattempo vengano creati o eliminati utenti o gruppi.
Endpoint di discovery
Tutti e tre richiedono lo stesso bearer token degli altri endpoint SCIM.
| Endpoint | Contenuto |
|---|---|
GET /ServiceProviderConfig | Funzionalità, riportate qui sotto |
GET /Schemas | Schemi Core User e Group, limitati agli attributi elencati sopra |
GET /ResourceTypes | User (/Users) e Group (/Groups), senza estensioni di schema |
{
"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
}
]
}Risoluzione dei problemi
| Problema | Soluzione |
|---|---|
400 Unsupported filter | Usa eq su userName o externalId (utenti) oppure su displayName o externalId (gruppi) |
409 uniqueness in creazione | Un altro utente ha già questo externalId, oppure il dipendente ha già un utente. Cerca l’utente con filter=externalId eq "…" e aggiornalo invece di crearlo |
| Una modifica di nome o cognome non compare | mTime memorizza un unico nome completo e non lo suddivide mai, quindi non può modificarne solo una parte. Invia givenName e familyName insieme nello stesso PATCH, oppure invia name.formatted o displayName |
| Una modifica del nome dall’IdP non compare | È previsto per un utente collegato a un dipendente finché Usa i nomi del provider di identità come nomi dei dipendenti è disattivata: il nome mostrato è quello del dipendente, che proviene dalla tua integrazione HR. Attiva l’impostazione se deve essere l’IdP a dare il nome ai dipendenti — vedi Quale nome imposta SCIM |
| Una modifica dell’indirizzo e-mail non compare | L’utente ha già attivato il proprio account; il suo indirizzo e-mail di accesso non è più gestito dal provisioning |
403 su un utente | L’utente è un proprietario dell’area di lavoro, che SCIM non può gestire |