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.

SCIM-provisjoneringsflyt for kunden

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

  1. Opprett en Enterprise application for provisjonering.
  2. Velg automatisk provisioning mode.
  3. Sett Tenant URL til kundens offentlige UserAPI-URL med /scim/v2.
  4. Bruk en bearer credential som gir bare userapi.scim.
  5. Kjør Test Connection og kontroller discovery-endepunktene.
  6. Konfigurer attributtmappingene nedenfor.
  7. Velg om bare tilordnede brukere og grupper eller hele valgt scope skal synkroniseres.
  8. 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

Kunderelevant SCIM-feltmapping

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

Deprovisjonering 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/Groups oppretter 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:

  1. les ressursen på nytt med id, eller filtrer på externalId hvis verdien er sendt
  2. sammenlign nåværende tilstand med ønsket tilstand
  3. gjenta PATCH/PUT hvis avviket fortsatt finnes
  4. eskaler ved vedvarende 409, 412 eller 503

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.
  • userName samsvarer med loginmappingen for konfigurert provider.
  • userCode er sendt ved oppretting og ligger innenfor WebSak-grensen på 10 tegn.
  • externalId er bare mappet hvis kunden trenger en separat korrelasjonsverdi; userType er 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.