SCIM 2.0-referens
Teknisk referens för identitetshanteringsteam som ansluter en IdP (Microsoft Entra ID, SailPoint IdentityIQ, …) till mTime: vilka SCIM 2.0-attribut och -operationer mTime stöder och vad var och en gör.
Översikt
| Bas-URL | https://<your mTime host>/api/scim/v2 |
| Standarder | RFC 7643 (schema), RFC 7644 (protokoll) |
| Autentisering | Bearer-token: en API-nyckel för arbetsytans provisionerings-serviceanvändare (se Konfigurera SCIM med Microsoft Entra ID) |
| Medietyp | application/scim+json |
| Resurser | /Users, /Groups |
| Fel | SCIM-felsvar (RFC 7644 §3.12) |
Vad SCIM hanterar, och vad det inte hanterar
mTime skiljer användaren (inloggning, roller, åtkomst) från den anställda och dennes anställningar:
Användare → Anställd → n anställningar
SCIM hanterar användaren: vem som får logga in, under vilket namn och med vilka roller. Anställda och anställningar — organisationsenhet, chef, anställningsvillkor, arbetstidsnorm, start- och slutdatum — är daterade uppgifter som mTime räknar på, och de kommer från din HR-integration, inte från SCIM. En SCIM-användare kopplas till sin anställda via externalId (se Så provisioneras användare).
Därför stöder mTime inte Enterprise User Extension: department, manager och employeeNumber är enskilda värden utan giltighetsdatum, medan en anställd i mTime kan ha flera daterade anställningar.
Användare
Attribut
Schema urn:ietf:params:scim:schemas:core:2.0:User.
| Attribut | Läsa | Skapa | Uppdatera | Anmärkningar |
|---|---|---|---|---|
id | ✅ | — | — | Tilldelas av mTime, kan inte ändras |
externalId | ✅ | ✅ | ✅ | Stabil nyckel (t.ex. anställningsnummer), unik per arbetsyta; en dubblett ger 409 uniqueness. Kan kopplas till ett anställdattribut för matchning |
userName | ✅ | ✅ | ⚠️ | Användarens e-postadress. Kan bara ändras så länge användaren inte har aktiverat sin inbjudan |
emails | ✅ | ✅ | ⚠️ | Det primära (eller första) värdet används; samma regel som för userName. Returneras som en enda primär e-postadress |
name.givenName, name.familyName | ❌ | ✅ | ⚠️ | Slås ihop till det fullständiga namnet — bara när båda skickas tillsammans (i ett name-objekt eller båda sökvägarna i samma PATCH). mTime lagrar ett fullständigt namn och delar aldrig upp det, så en PATCH med bara det ena ignoreras. Vid skapande och PUT används ett för- eller efternamn ensamt bara när det saknas name.formatted och displayName. Returneras inte vid läsning: namnet kommer tillbaka som name.formatted |
name.formatted | ✅ | ✅ | ⚠️ | Fullständigt namn; har företräde framför för- och efternamn. En ändring syns inte för en användare som är kopplad till en anställd, om inte IdP:n namnger de anställda — se Vilket namn SCIM sätter |
displayName | ✅ | ✅ | ⚠️ | Fullständigt namn. Samma regel för ändringar som name.formatted |
active | ✅ | — | ✅ | false stänger av användaren; true återaktiverar |
meta.resourceType, meta.location | ✅ | — | — |
Alla andra Core User-attribut (nickName, title, phoneNumbers, addresses, password, …) och Enterprise User Extension (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User) stöds inte: de ignoreras när användare skapas och uppdateras och returneras aldrig.
Vilket namn SCIM sätter
mTime visar ett namn för en person: den anställdas namn när användaren är kopplad till en anställd, annars användarens namn.
- En användare som är kopplad till en anställd visar den anställdas namn, som er HR-integration underhåller. Som standard uppdaterar SCIM inte en befintlig anställd, så ett namn som skickas via SCIM syns inte för den här användaren. Är Använd identitetsleverantörens namn som medarbetarnamn
påslagen skriver varje skapande,
PUTellerPATCHmed ett namn även namnet till den kopplade anställda — se Använda identitetsleverantörens namn för anställda. - En användare utan anställd (t.ex. ett utkast) visar användarens eget namn. SCIM sätter det vid skapandet och kan ändra det tills personen aktiverar sin inbjudan; därefter följer det namnet på personens eget mTime-konto. Skapar en roll senare personens anställdpost, får den anställda det här namnet från början.
Ändra namnet i HR-systemet för att byta namn på en anställd — eller i IdP:n om den inställningen är påslagen.
Operationer
| Operation | Stöds | Beteende |
|---|---|---|
POST /Users | ✅ | Skapar användaren som inbjuden och skickar inbjudningsmejlet. En e-postadress krävs (emails, eller userName när det är en adress). Kopplar till en befintlig anställd när någon matchar; annars skapas ett utkast utan roll, utan anställd och utan inbjudan. 409 om externalId eller den anställda redan är upptagen |
GET /Users/{id} | ✅ | |
GET /Users?filter=… | ⚠️ | Endast attribute eq "value", på userName eller externalId. Andra attribut eller operatorer ger 400. Kan kombineras med sidindelning |
GET /Users (utan filter) | ✅ | Alla användare, sida för sida — se Sidindelning |
PUT /Users/{id} | ✅ | Tillämpar de attribut som stöds ovan |
PATCH /Users/{id} | ⚠️ | add och replace på active, userName, emails, displayName, name (objekt), name.givenName, name.familyName, name.formatted, externalId, eller utan sökväg (partiell resurs). En sökväg får ha schemaprefixet (urn:ietf:params:scim:schemas:core:2.0:User:name.givenName). remove och andra sökvägar ignoreras |
DELETE /Users/{id} | ✅ | Raderar användarkontot (mjuk radering) och avslutar alla sessioner. Den anställda och dennes historik bevaras. Returnerar 204 |
Användare med rollen owner kan inte ändras eller raderas via SCIM (403).
Inaktivera eller radera?
PATCH active=false | DELETE | |
|---|---|---|
| Kan logga in | Nej — sessionerna avslutas direkt | Nej — sessionerna avslutas direkt |
| Användarkonto | Behålls, status avstängd | Raderas (mjuk radering) |
| Anställd, tidsposter, godkännanden | Behålls | Behålls |
| Återkomst | PATCH active=true återställer samma användare | En ny POST skapar en ny användare, kopplad till samma anställda |
Grupper
Grupper motsvarar mTime-roller: IdP:n bestämmer om en grupp finns och vilka som är medlemmar, mTime-administratörerna bestämmer rollens behörigheter. Se Så blir grupper roller.
Attribut
Schema urn:ietf:params:scim:schemas:core:2.0:Group.
| Attribut | Läsa | Skapa | Uppdatera | Anmärkningar |
|---|---|---|---|---|
id | ✅ | — | — | Tilldelas av mTime |
externalId | ✅ | ✅ | ✅ | |
displayName | ✅ | ✅ | ✅ | Kopplas till rollen med samma namn, eller skapar en tom anpassad roll. Byter gruppen namn byter rollen också namn |
members (value, display) | ✅ | ✅ | ✅ | value är användarens SCIM-id |
Operationer
| Operation | Stöds | Beteende |
|---|---|---|
POST /Groups | ✅ | Kopplas till rollen eller skapar den |
GET /Groups/{id} | ✅ | |
GET /Groups?filter=… | ⚠️ | Endast attribute eq "value", på displayName eller externalId |
GET /Groups (utan filter) | ✅ | Alla roller som hanteras av IdP:n, sida för sida — se Sidindelning |
PUT /Groups/{id} | ✅ | Ersätter namn och medlemmar |
PATCH /Groups/{id} | ✅ | add, replace och remove på members (inklusive members[value eq "…"]) och displayName |
DELETE /Groups/{id} | ✅ | Tar bort rollen från dess medlemmar. Själva rollen raderas bara om ingen administratör någonsin har konfigurerat den |
Sidindelning
GET /Users och GET /Groups stöder indexbaserad sidindelning (RFC 7644 §3.4.2.4), med eller utan filter.
| Parameter | Standard | Kommentar |
|---|---|---|
startIndex | 1 | 1-baserad position för det första resultatet. Värden under 1 räknas som 1 |
count | 200 | Resultat per sida, högst 200. count=0 returnerar bara totalResults |
Svaret anger totalResults (alla träffar), startIndex och itemsPerPage (resultaten på den här sidan). Hämta nästa sida med startIndex + itemsPerPage tills du har totalResults resultat. Resultaten kommer i en fast ordning, så sidorna varken hoppar över eller upprepar resultat, om inte användare eller grupper skapas eller tas bort under tiden.
Discovery-endpoints
Alla tre kräver samma bearer-token som de övriga SCIM-endpointerna.
| Endpoint | Innehåll |
|---|---|
GET /ServiceProviderConfig | Funktioner, visas nedan |
GET /Schemas | Core-schemana User och Group, begränsade till attributen ovan |
GET /ResourceTypes | User (/Users) och Group (/Groups), utan schemautökningar |
{
"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
}
]
}Felsökning
| Problem | Lösning |
|---|---|
400 Unsupported filter | Använd eq på userName eller externalId (användare) eller på displayName eller externalId (grupper) |
409 uniqueness när användaren skapas | En annan användare har redan detta externalId, eller så har den anställda redan en användare. Slå upp användaren med filter=externalId eq "…" och uppdatera den i stället |
| Ett ändrat för- eller efternamn syns inte | mTime lagrar ett fullständigt namn och delar aldrig upp det, så det kan inte ändra bara den ena delen. Skicka givenName och familyName tillsammans i samma PATCH, eller skicka name.formatted eller displayName |
| En namnändring från IdP:n syns inte | Förväntat för en användare som är kopplad till en anställd så länge Använd identitetsleverantörens namn som medarbetarnamn är avslagen: namnet som visas är den anställdas, och det kommer från er HR-integration. Slå på inställningen om IdP:n ska bestämma de anställdas namn — se Vilket namn SCIM sätter |
| En ändrad e-postadress syns inte | Användaren har redan aktiverat sitt konto; inloggningsadressen hanteras inte längre av provisioneringen |
403 på en användare | Användaren är arbetsyteägare, och sådana kan SCIM inte hantera |