Sync / roster

Grouper Group Provisioning to Microsoft Entra ID via SCIM

GMEIOSPI Grouper (TIER / Internet2) ──▶ Microsoft Entra ID

Bi-directional synchronization of Grouper organizational groups to Microsoft Entra ID using the SCIM 2.0 protocol for automated identity lifecycle management in higher education.

TypeSync / roster
Indicative timeline3–6 weeks
ComplexityHigh
DeliveryFixed-scope
  • Eliminate manual group membership management across Entra ID applications
  • Enforce least-privilege access with automated deprovisioning on group removal
  • Achieve continuous compliance audit readiness with synchronized identity data
scim 2.0 identity governance grouper entra id internet2 tier higher education iam automated provisioning azure ad
How it works

This integration bridges Grouper (the open-source identity governance tool widely deployed in research universities via the Internet2 TIER stack) to Microsoft Entra ID using the SCIM 2.0 protocol. The challenge lies in translating Grouper's flexible, folder-hierarchical stem/group model into Entra ID's flat security-group structure while preserving inheritance chains and handling real-time membership deltas.

Unlike simple LDAP syncs, this requires custom SCIM attribute mapping, delta-change detection on Grouper stem-loader outputs, and conflict resolution when Grouper references external stems or registry authorities.

Free reference snippet

Yours to use

A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.

Grouper's SCIM 2.0 provisioner exposes groups as `/scim/v2/Groups` with members as `/scim/v2/Users`, requiring attribute mapping to Entra ID's schema.
# Grouper SCIM Provisioner Configuration (grouper-loader.properties)
provisionerConfig.type = scim2
provisionerConfig.baseUrl = https://login.microsoftonline.com/{tenant}/scim
provisionerConfig.authType = bearer
provisionerConfig.token = {EntraID_SCIM_BearerToken}
scim2.filter.groupTypes = group
scim2.user.attribute.email = mail
scim2.group.attribute.name = name

# Sample SCIM Group payload sent by Grouper to Entra ID
POST /scim/v2/Groups
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "displayName": "course:ASTR-101-2024:students",
  "externalId": "grouper:course:a9b2c3",
  "members": [
    { "value": "uid=smith,ou=people,dc=univ,dc=edu", "type": "user" }
  ]
}
Grouper AttributeSCIM 2.0 FieldEntra ID Field
namedisplayNamedisplayName
uuidexternalIdexternalId
memberIdsmembers[].valuemembers
mailemails[0].valuemail
descriptiondescriptiondescription

Implementation pathway

Step by step

How we'd take this from discovery to a production-safe cutover — the phases, the canonical mapping, and the edge cases that bite.

This implementation pathway covers provisioning Grouper organizational groups to Microsoft Entra ID using the SCIM 2.0 protocol, enabling automated group lifecycle management for applications integrated through Entra ID.

Phases

  1. Discovery and Requirements Gathering — Inventory existing Grouper stems, folders, and groups to be provisioned. Identify target Entra ID security groups or Microsoft 365 groups to receive provisioning. Determine naming conventions, attribute requirements, and whether membership should be provisioned (groups as containers) or just group metadata. Review current Grouper version for SCIM capability support (grouper-scim provisioner added in Grouper 2.5+). Document ownership, approval workflows, and compliance constraints specific to your institution.
  2. Entra ID SCIM Endpoint Configuration — In the Entra ID admin center, create a new non-gallery enterprise application for Grouper provisioning. Navigate to ProvisioningProvisioning Mode: Automatic. Retrieve the Tenant URL (typically https://graph.microsoft.com/scim_v2/ for the built-in SCIM endpoint) and generate a Secret Token. Configure the Provisioning Status to Off until ready. Note the applicationId for Grouper configuration.
  3. Grouper SCIM Provisioner Setup — Install and configure the Grouper SCIM provisioner. In the Grouper UI, create a new provisioner of type scim. Set the endpoint URL to the Entra ID SCIM base URI. Configure authentication using the generated secret token. Define the targetStem (Grouper folder path) to provision and the groupAttributeMap specifying how Grouper group names map to SCIM displayName. Enable provisionMembers: true if membership sync is required.
  4. Attribute Mapping and Transformation — Define the field mapping between Grouper and SCIM schema. Map groupNameExtension (the group name within its stem) to SCIM displayName. Map uuid to SCIM externalId. For members, map Grouper subject IDs to SCIM members[].value with type: "Group". Configure any prefix/suffix transformations needed to match Entra ID naming standards. Set syncEnabled: true for active provisioning.
  5. Loader Job and Scheduling — Create a Grouper loader job (GrouperLoaderType) to run the SCIM provisioner on a schedule (e.g., hourly or daily). Configure quartzCron expression for timing. Set provisionerTypeName: scim and reference the provisioner configuration. Test the loader in DEBUG logging mode and verify SCIM requests are sent correctly via the Grouper logs at GrouperSystemOut.log.
  6. Testing and Validation — Provision a single pilot group manually via the Grouper UI provisioner action. Verify the group appears in Entra ID under the enterprise application. Confirm attribute fidelity (name, description, membership). Test update scenarios (renaming group in Grouper, adding/removing members) and verify changes propagate. Test deletion scenarios: move group to etc:provisioningInactive stem and confirm Entra ID removes it. Validate with large groups (>1,000 members) for pagination handling.
  7. Staged Cutover — Enable provisioning for additional groups incrementally by stem. Disable the loader, update targetStem to include more folders, and re-enable. Monitor the Entra ID provisioning logs for errors. Perform a full reconciliation by running Retry in Entra ID provisioning blade for any failed operations.

Field Mapping

Grouper Field SCIM 2.0 Attribute Entra ID Representation Notes
name displayName Group display name Required; subject to Entra ID naming policies
uuid externalId Source identifier Used for idempotent updates
description description Group description Optional; carried through SCIM
members[].subjectId members[].value Member objectId or userPrincipalName Requires subject resolution mapping
displayExtension mailNickname Alias in Exchange Auto-generated if not mapped
stemName Custom header or filter Provisioning scope Used to scope which groups sync
attributeValueCache0 active Group enabled/disabled Set true for active provisioning

Edge Cases

  • Group naming conflicts — Entra ID enforces uniqueness and naming policy restrictions; if a Grouper group name violates these (e.g., contains special characters), provisioning fails silently or creates a malformed entry.
  • Subject resolution failures — If a Grouper member's subject cannot be resolved to an Entra ID object (user deleted, UPN changed), SCIM provisioning of that member fails and may block the entire group provision.
  • Large group pagination — Entra ID SCIM endpoint has limits on members array size per request; Grouper SCIM provisioner must implement pagination correctly or batch requests.
  • Concurrent modification — If a group is renamed in both Grouper and Entra ID simultaneously, the last-write-wins behavior may cause drift; implement an externalId anchoring strategy to prevent duplicate groups.
  • Stem deletion propagation — Deleting a Grouper stem with many groups may generate a flood of SCIM DELETE requests; Entra ID throttling may cause partial deletes, leaving orphaned groups.
  • Provisioning loop — If Entra ID also writes back to Grouper (bi-directional), circular provisioning loops can occur; ensure one side is read-only or implement change detection guards.
  • Attribute encoding — Special characters in Grouper descriptions (e.g., &, <) must be properly escaped in JSON SCIM payloads; improper encoding causes 400 errors.

Cutover

Execute cutover during a maintenance window with the loader disabled. Perform an initial full sync by running the Grouper loader once manually, then trigger a Retry on all pending items in the Entra ID provisioning blade to reconcile. Before going live, export the current Entra ID group membership to a CSV for rollback reference. Establish a reversible state by keeping the old security group memberships intact until confirmed. If rollback is required, disable the SCIM provisioner and manually re-sync affected groups from the exported CSV. Set up monitoring alerts on the Entra ID provisioning health blade and configure Grouper log rotation to retain loader history for audit. Schedule a post-cutover review in 48 hours to validate no drift has occurred and that incremental syncs are completing without errors.

What a full implementation includes

  • Canonical mapping between Grouper (TIER / Internet2) and Microsoft Entra ID, to the field level.
  • The edge cases that corrupt data at cutover — identified, handled, and tested.
  • Production-safe rollout: reversible, phased, with reconciliation checks.
  • Handover documentation your team can operate from.

Build this against your estate

Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.

$14,000–$38,000
Contact us