Forum Discussion

alexstrange's avatar
alexstrange
Copper Contributor
Jul 04, 2024

Error in Manager data synchronization via SCIM

Hello!

My name is Alex Moiseev, and I am experiencing an issue with user synchronization via SCIM with Azure Active Directory. Well, actually with manager synchronization.

 

As far as I understand, the approach of provisioning of the user is the following.
Step 1. Provisioner tries to get info about the user by id with GET User resource request.
Step 2. Based on information received, Provisioner decides should the whole information about the user be sent or there is a need only to update certain fields.
Step 3. Provisioner send POST or PUT/PATCH request with user details to create/update user on the receiver side.

And everything works more or less ok, but the managers.

 

In user data to provide there is one field, which is used for manager info:

urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager

 

When there is no manager on consumer side assigned to the user, everything works perfectly.
The provisioner sends manager info in both cases - with existing and with non-existing user.

If the manager is changed on Azure AD side, we still receive manager data in the field mentioned in PATCH request in order to overwrite stored manager.

But when the manager is removed on Azure AD side, we didn't receive any information about it - urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager field doesn't exist in PATCH request.

 

We thought, that may be because we didn't add manager information in GET User resource response.
We tried to add manager information there according to the documentation (https://docs.microsoft.com/en-us/azure/active-directory/app-provisioning/use-scim-to-provision-users-and-groups) by adding

 

    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
      "manager": "0"
    },



We use "0" in order to make the provisioner to send us information about the manager in each request.

But we've got an error there:

 

  Error message
  We are not able to deserialize the resource received from your SCIM endpoint because your SCIM endpoint is not fully compatible with the Azure Active Directory SCIM client. Here is the resource we received from your SCIM endpoint:
{
    "schemas”: [
      "urn:ietf:params:scim:schemas:core:2.0:User",
      "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "externalId": "Worker",
    "id": "1548197",
    "userName": "email address removed for privacy reasons",
    "name": {
      "familyName": "Ker",
      "givenName": "Wor"
    },
    "emails": [
      {
        "value": "email address removed for privacy reasons",
        "type": "work",
        "primary": true
      }
    ],
    "title": "Developer",
    "locale": "nl",
    "timezone": "CEST",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
      "manager": "0"
    },
    "active": true,
    "displayName": "Wor Ker"
  }
  Please refer to the Azure Active Directory SCIM provisioning documentation (https://docs.microsoft.com/en-us/azure/active-directory/app-provisioning/use-scim-to-provision-users-and-groups) and adapt the SCIM endpoint to be able to process provisioning requests from Azure Active Directory.


We have reviewed the documentation referenced, and the format for specifying the manager is exactly as indicated in the documentation.
If the "manager" field is removed from the data, the error does not occur.

 

So, the questions are:

1. How should we provide manager information in the response of GET User resource call?
2. How should we catch the removing of the manager in Azure in a proper way?

 

I would appreciate your assistance in resolving this issue.
I'd like to know what is causing the error and how to correctly transmit manager information via SCIM.

Thank you in advance for your attention and help!

 

Yours sincerely,
Alex Moiseev

2 Replies

  • alexstrange 

    To resolve your SCIM manager synchronization issues, try these steps

    Provide Manager Info Correctly: Use this format in your GET response:
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
      "manager": {
        "value": "managerId",
        "$ref": "https://your-endpoint/Users/managerId"
      }
    }

    Handle Manager Removal: Azure omits the manager field in PATCH requests when removed. Ensure your endpoint detects its absence or handles the "remove" operation for the manager path:
    {
      "op": "remove",
      "path": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.manager"
    }

    Fix the Error: Ensure your SCIM endpoint fully supports Azure's expected formats and operations to avoid compatibility issues.

    Test and validate your SCIM implementation for both adding/updating and removing managers.

  • Try this:

     

    {
      "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User",
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
      ],
      "id": "1548197",
      "userName": "email address removed for privacy reasons",
      "name": {
        "familyName": "Ker",
        "givenName": "Wor"
      },
      "emails": [
        {
          "value": "email address removed for privacy reasons",
          "type": "work",
          "primary": true
        }
      ],
      "title": "Developer",
      "locale": "nl",
      "timezone": "CEST",
      "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
        "manager": {
          "value": "managerId"
        }
      },
      "active": true,
      "displayName": "Wor Ker"
    }
    

     

Resources