SCIM-provisjonering fra Microsoft Entra ID (beta)
Beta: SCIM-grensesnittet er tilgjengelig for kontrollert utprøving, men er ikke klart for full produksjon. Avtal avgrenset pilot, testdata, ansvar og tilbakeføringsrutine før provisjonering aktiveres. REST UserAPI er ikke beta.
SCIM 2.0-grensesnittet ligger under /scim/v2/, bruker media type
application/scim+json og krever scope userapi.scim. Det støtter Entra-flyter
for brukere, grupper, medlemskap, deaktivering og reaktivering.
Støttede endepunkter
| Ressurs | Operasjoner |
|---|---|
| Discovery | GET /ServiceProviderConfig, /ResourceTypes, /Schemas og /Schemas/{uri} |
| Users-samling | GET /Users og POST /Users |
| Enkeltbruker | GET, PUT, PATCH og DELETE /Users/{id} |
| Groups-samling | GET /Groups og POST /Groups |
| Enkeltgruppe | GET, PATCH og DELETE /Groups/{id} |
PUT /Groups/{id} støttes ikke og returnerer 405 Method Not Allowed.
DELETE er deaktivering, ikke fysisk sletting.
Oppsett i Entra
- Opprett en Enterprise application for provisjonering.
- Velg automatisk provisioning mode.
- Sett Tenant URL til kundens offentlige UserAPI-URL med
/scim/v2. - Bruk en bearer credential som gir bare
userapi.scim. - Kjør Test Connection og kontroller discovery-endepunktene.
- Konfigurer attributtmappingene nedenfor.
- Velg om bare tilordnede brukere og grupper eller hele valgt scope skal synkroniseres.
- Kjør Provision on demand for én member og én guest før full synkronisering.
Tokenet må fornyes etter kundens avtalte levetid. Ikke bruk et personlig token.
Brukerattributter
| Entra-kilde | SCIM-mål | Krav og merknad |
|---|---|---|
| UPN/loginidentifikator | userName |
Påkrevd; brukes som nøkkel i loginmapping for konfigurert provider. Kan være lengre enn 10 tegn. |
| Kundens avtalte korte brukerkode | Acos userCode |
Påkrevd ved POST, maksimalt 10 tegn; lagres i Gid_GidKode. SCIM genererer ikke koden. |
objectId (valgfritt) |
externalId |
Valgfri korrelasjonsverdi; lagres uendret i Gid_DIV2. Brukes ikke som loginidentifikator. |
accountEnabled |
active |
Styrer deaktivering og reaktivering |
givenName |
name.givenName |
Skrivbar |
surname |
name.familyName |
Skrivbar |
displayName |
displayName |
Brukes som formatert navn |
mail |
emails[type eq "work"].value |
Primær jobb-e-post |
| jobbtelefon | phoneNumbers[type eq "work"].value |
Primær jobbtelefon |
| sekundær telefon | phoneNumbers[type eq "other"].value |
work2 godtas bare som input-alias |
| mobil | phoneNumbers[type eq "mobile"].value |
Mobiltelefon |
preferredLanguage |
preferredLanguage |
Må finnes i kundens språkmapping |
| avdelingens eksterne ID | enterprise department |
Eksakt oppslag mot ett Gid_DIV1 |
| applikasjonsrolle | Acos applicationRole |
Slås opp til én rettighetsmal |
Enterprise-attributtet bruker URI-en
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department.
Acos-attributtet bruker
urn:acos:params:scim:schemas:extension:user:2.0:AcosUser; userCode og
applicationRole ligger i dette extension-objektet.
Ikke map userType. Entra member og guest behandles likt av SCIM-adapteren;
tilgang styres av assignment, grupper, avdeling og applicationRole, ikke av
Entras userType.
Avdelings- og rettighetsmapping
SCIM department skal inneholde én eksakt ekstern avdelings-ID. UserAPI slår
verdien opp mot avdelingens Gid_DIV1. Pipe-separerte eller kommaseparerte
verdier støttes ikke. Oppslaget må gi nøyaktig én aktiv avdeling.
applicationRole oversettes gjennom
Scim:ApplicationRoleAccessTemplateIdMap. Eksempelverdiene i
konfigurasjonsmalen er plassholdere; kunden må bruke
sine reelle rettighetsmaler og dokumentere hvem som godkjenner endringer.
Livssyklus for brukere
Oppretting
Entra sender POST /scim/v2/Users med userName og Acos userCode.
userName må kunne knyttes til en loginmapping for konfigurert provider.
UserAPI oppretter WebSak-brukeren med userCode i Gid_GidKode, lagrer
eventuell externalId i Gid_DIV2, anvender avdeling/rettighetsmal og knytter
userName til den moderne loginmappingen.
Scim:ModernAuthentication:IdentifierSource er valgfritt. Når det utelates,
brukes userName; eksplisitt userName er også støttet. Andre verdier gir en
konfigurasjons-/utilgjengelighetsfeil. Loginmappingen for konfigurert provider er
kilden til userName; SCIM oppretter ikke en separat kopi av UPN i WebSak.
Users-listing utelater brukere uten mapping for denne provideren, slik at hvert
listet SCIM User har påkrevd userName. Direkte GET av en slik umappet bruker
returnerer 404.
Oppdatering
Entra bruker normalt PATCH /scim/v2/Users/{id}. add, replace og remove
støttes for den avtalte profilen, blant annet navn, e-post, telefon, active,
externalId, preferredLanguage, department og applicationRole. Utelatt
userCode ved PUT/PATCH bevarer eksisterende kode. PUT kan brukes for full
ressursoppdatering. Bruk If-Match når klienten har mottatt en ETag og vil
unngå å overskrive en samtidig endring.
Deaktivering og reaktivering
DELETE /scim/v2/Users/{id} eller PATCH med active=false deaktiverer brukeren
uten fysisk sletting. Operasjonen er idempotent. Brukeren kan fortsatt hentes og
reaktiveres med PATCH eller PUT som setter active=true.
Saker, journalposter, dokumenter og oppgaver blir ikke automatisk omfordelt når en bruker deaktiveres eller bytter avdeling. Denne forvaltningsoppgaven må inngå i kundens avslutnings- og flytteprosess.
Grupper og medlemskap
Map Entra displayName til SCIM displayName og members til members.
POST /scim/v2/Groupsoppretter en navngitt tilgangsgruppe.PATCH /scim/v2/Groups/{id}kan endre navn og legge til eller fjerne medlemmer.DELETE /scim/v2/Groups/{id}deaktiverer gruppen og skjuler den fra SCIM-oppslag.
Group PatchOp støtter Entras vanlige add og remove. Tjenesten aksepterer også
replace av hele members-attributtet. En eksplisitt tom
"Operations": [] behandles som en no-op med 204 for kompatibilitet med
Microsoft SCIM Validator.
Filter, sortering og projeksjon
Users og Groups støtter de dokumenterte eq, and, or og pr-uttrykkene.
Users kan sorteres på de tillatte standardfeltene i OpenAPI-referansen.
Paginering bruker startIndex og count.
attributes og excludedAttributes kan ikke brukes samtidig. schemas og id
returneres alltid. Den støttede profilen lover toppnivåprojeksjon og hele
extension-objekter, ikke generell projeksjon av alle subattributter.
Retry og feilhåndtering
En retry skal bruke samme SCIM id når den er kjent. Hvis integrasjonen sender
externalId, beholdes samme klientstyrte korrelasjonsverdi ved retry; SCIM
externalId er valgfritt og brukes ikke til loginmapping. Ved usikkert resultat:
- les ressursen på nytt med
id, eller filtrer påexternalIdhvis verdien er sendt - sammenlign nåværende tilstand med ønsket tilstand
- gjenta PATCH/PUT hvis avviket fortsatt finnes
- eskaler ved vedvarende
409,412eller503
UserAPI synkroniserer loginmapping fra userName, også når verdien er uendret,
slik at en retry kan konvergere etter en midlertidig IdentityServer-feil. Oppdateringen er
ikke atomisk mellom WebSak og IdentityServer; et WebSak-steg kan være fullført
før et senere delkall feiler.
Alle eksplisitt håndterte SCIM-feil følger RFC 7644-format:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "400",
"scimType": "invalidValue",
"detail": "Forklaring uten hemmelige verdier."
}
| Status | Vanlig årsak | Tiltak |
|---|---|---|
400 |
ugyldig attributt, filter, mapping eller manglende userName/userCode |
korriger payload/mapping |
401 |
token mangler eller er utløpt | hent nytt token |
403 |
token mangler userapi.scim |
korriger klientens scope |
404 |
bruker, gruppe eller medlem finnes ikke | les scope/korrelasjon på nytt |
409 |
duplikat identitet eller navn | finn eksisterende ressurs og rett mapping |
412 |
ETag samsvarer ikke | GET, flett ønsket endring og forsøk med ny ETag |
503 |
IdentityServer/provider er ikke tilgjengelig eller konfigurert | rett konfigurasjon og retry senere |
Pilot- og akseptansesjekkliste
- Test Connection er grønn med scope
userapi.scim. - Både én Entra member og én guest kan opprettes, oppdateres og deaktiveres.
- Begge kan reaktiveres uten ny WebSak-bruker.
userNamesamsvarer med loginmappingen for konfigurert provider.userCodeer sendt ved oppretting og ligger innenfor WebSak-grensen på 10 tegn.externalIder bare mappet hvis kunden trenger en separat korrelasjonsverdi;userTypeer ikke mappet.- Avdelingsoppslag bruker én eksakt ekstern ID.
- Alle
applicationRole-verdier peker til godkjente rettighetsmaler. - Gruppeoppretting og add/remove av medlem er testet.
- Provisioning logs er uten vedvarende feil etter retry.
- Eier for tokenfornyelse, mapping og hendelseshåndtering er avtalt.
- Pilotens stoppkriterier og tilbakeføringsrutine er prøvd før omfanget økes.