Vai al contenuto

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 basehttps://<your mTime host>/api/scim/v2
StandardRFC 7643 (schema), RFC 7644 (protocollo)
AutenticazioneBearer token: una chiave API dell’utente di servizio di provisioning dell’area di lavoro (vedi Configurare SCIM con Microsoft Entra ID)
Media typeapplication/scim+json
Risorse/Users, /Groups
ErroriRisposte 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.

AttributoLetturaCreazioneAggiornamentoNote
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, PUT o PATCH che 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

OperazioneSupportataComportamento
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=falseDELETE
Può accedereNo — le sessioni si chiudono immediatamenteNo — le sessioni si chiudono immediatamente
Account utenteConservato, stato sospesoEliminato (eliminazione soft)
Dipendente, registrazioni ore, approvazioniConservatiConservati
RitornoPATCH active=true ripristina lo stesso utenteUn 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.

AttributoLetturaCreazioneAggiornamentoNote
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

OperazioneSupportataComportamento
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.

ParametroPredefinitoNote
startIndex1Posizione (a partire da 1) del primo risultato. I valori inferiori a 1 valgono 1
count200Risultati 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.

EndpointContenuto
GET /ServiceProviderConfigFunzionalità, riportate qui sotto
GET /SchemasSchemi Core User e Group, limitati agli attributi elencati sopra
GET /ResourceTypesUser (/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

ProblemaSoluzione
400 Unsupported filterUsa eq su userName o externalId (utenti) oppure su displayName o externalId (gruppi)
409 uniqueness in creazioneUn 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 comparemTime 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 compareL’utente ha già attivato il proprio account; il suo indirizzo e-mail di accesso non è più gestito dal provisioning
403 su un utenteL’utente è un proprietario dell’area di lavoro, che SCIM non può gestire