Partager via


Étendre l’approvisionnement piloté par les API pour synchroniser les attributs personnalisés

Par défaut, les applications d’approvisionnement pilotées par les API prennent en charge les attributs de traitement qui font partie du schéma standard d’utilisateur principal et d’utilisateur d’entreprise SCIM. Votre système d’enregistrement peut avoir des attributs personnalisés que vous souhaiterez peut-être inclure dans le cadre de l’approvisionnement piloté par les API. Ce tutoriel avancé explique comment étendre votre application d’approvisionnement pilotée par l’API pour traiter des attributs personnalisés supplémentaires.

Remarque

Avant d’essayer ce scénario avancé, nous vous recommandons de vérifier que la configuration de votre application de provisionnement prête à l’emploi fonctionne comme prévu à l’aide de l’un des clients d’API Afficheur Graph ou cURL.

Exemple de scénario

Vous avez configuré l’application d’approvisionnement pilotée par l’API. L’approvisionnement de l’application utilise correctement les attributs qui font partie du schéma standard d’utilisateur principal SCIM et d’utilisateur d’entreprise et approvisionne les utilisateurs dans Microsoft Entra. Vous souhaitez maintenant envoyer deux attributs personnalisés HireDate et JobCode de votre système RH au point de terminaison d’API d’approvisionnement entrant. Vous souhaitez mapper ces deux attributs personnalisés aux attributs employeeHireDate et jobTitle de Microsoft Entra.

Étape 1 : étendre le schéma d’application d’approvisionnement

Dans cette étape, nous allons ajouter les deux attributs « HireDate » et « JobCode » qui ne font pas partie du schéma SCIM standard à l’application d’approvisionnement et les utiliser dans le flux de données d’approvisionnement.

  1. Connectez-vous au centre d'administration Microsoft Entra au minimum en tant qu’Administrateur d'application.
  2. Accédez à Identité>Applications>Applications d’entreprise.
  3. Ouvrez votre application de provisionnement basée sur l'API.
  4. Ouvrez le panneau Approvisionnement.
  5. Cliquez sur le bouton Modifier l’approvisionnement .
  6. Développez la section Mappages et cliquez sur le lien mappage d’attributs.
    Capture d’écran de du mappage d’attributs modifiés.
  7. Faites défiler la page Mappages d’attributs vers le bas. Sélectionnez Afficher les options avancées, puis cliquez sur le lien Modifier la liste des attributs pour l’API . Capture d’écran de la liste d’attributs d’API modifiée.
  8. Faites défiler jusqu’à la fin de la page Modifier la liste d’attributs .
  9. Ajoutez les deux attributs suivants à la liste en tant qu’extensions de schéma SCIM. Vous pouvez utiliser votre propre espace de noms de schéma SCIM.
    urn:ietf:params:scim:schemas:extension:contoso:1.0:User:HireDate
    urn:ietf:params:scim:schemas:extension:contoso:1.0:User:JobCode
    Capture d’écran de l’ajout des attributs personnalisés.
  10. Enregistrez vos modifications

Remarque

Si vous souhaitez ajouter seulement quelques attributs supplémentaires à l’application d’approvisionnement, utilisez le centre d’administration de Microsoft Entra pour étendre le schéma. Si vous souhaitez ajouter d’autres attributs personnalisés (supposons plus de 20 attributs), nous vous recommandons d’utiliser le UpdateSchema mode du script PowerShell CSV2SCIM qui automatise le processus manuel ci-dessus.

Étape 2 : mapper les attributs personnalisés

Nous allons maintenant ajouter ces extensions au mappage d’attributs d’application d’approvisionnement.

  1. Cliquez sur le lien Ajouter un nouveau mappage dans la page Mappage d’attributs . Capture d’écran montrant l’ajout d’un nouveau mappage.

  2. Mapper l’attribut urn:ietf:params:scim:schemas:extension:contoso:1.0:User:HireDate à employeeHireDate. Cliquez sur OK.
    Capture d’écran du mappage de la date d’embauche.

  3. Ensuite, sélectionnez le mappage existant pour title et cliquez dessus pour modifier le mappage.

  4. Modifiez le mappage d’attributs à une expression qui inclura le urn:ietf:params:scim:schemas:extension:contoso:1.0:User:JobCode dans le cadre de l’attribut Microsoft Entra jobTitle.

      Join("", [title], "(", [urn:ietf:params:scim:schemas:extension:contoso:1.0:User:JobCode], ")")
    

    Capture d’écran du mappage du poste.

    Avec ce mappage d’expressions, si title est « Tour Lead » et JobCode est « TL-1001 », l’attribut Microsoft Entra jobTitle AD est défini sur « Tour Lead (TL-1001) ».

  5. Enregistrez les mappages d’attributs.

Étape 3 : charger une requête en bloc avec des attributs personnalisés

  1. Ouvrez votre client API (afficheur Graph/cURL).
  2. Copiez-collez la demande en bloc avec des attributs personnalisés.
  3. Envoyez la demande en bloc à l’URL du point de terminaison de l’API d’approvisionnement.
    Capture d’écran de la demande d’upload en bloc.
  4. Après un certain temps, vous pouvez vérifier les journaux d’approvisionnement pour vérifier le changement d’attribut.
    Capture d’écran des journaux d’approvisionnement.
  5. Vous pouvez également vérifier la modification du profil utilisateur Microsoft Entra. La valeur de Employee hire date reflète le fuseau horaire de votre locataire.
    Capture d’écran du profil utilisateur.

Annexe

Demande en bloc avec des attributs personnalisés

La demande en bloc inclut les attributs personnalisés configurés dans les étapes ci-dessus.

Corps de la demande

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"],
    "Operations": [
    {
        "method": "POST",
        "bulkId": "701984",
        "path": "/Users",
        "data": {
            "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
            "urn:ietf:params:scim:schemas:extension:contoso:1.0:User"],
            "externalId": "701984",
            "userName": "bjensen@example.com",
            "name": {
                "formatted": "Ms. Barbara J Jensen, III",
                "familyName": "Jensen",
                "givenName": "Barbara",
                "middleName": "Jane",
                "honorificPrefix": "Ms.",
                "honorificSuffix": "III"
            },
            "displayName": "Babs Jensen",
            "nickName": "Babs",
            "emails": [
            {
              "value": "bjensen@example.com",
              "type": "work",
              "primary": true
            }
            ],
            "addresses": [
            {
              "type": "work",
              "streetAddress": "234300 Universal City Plaza",
              "locality": "Hollywood",
              "region": "CA",
              "postalCode": "91608",
              "country": "USA",
              "formatted": "100 Universal City Plaza\nHollywood, CA 91608 USA",
              "primary": true
            }
            ],
            "phoneNumbers": [
            {
              "value": "555-555-5555",
              "type": "work"
            }
            ],
            "userType": "Employee",
            "title": "Tour Guide",
            "preferredLanguage": "en-US",
            "locale": "en-US",
            "timezone": "America/Los_Angeles",
            "active":true,
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
                "employeeNumber": "701984",
                "costCenter": "4130",
                "organization": "Universal Studios",
                "division": "Theme Park",
                "department": "Tour Operations",
                "manager": {
                  "value": "89607",
                  "displayName": "John Smith"
                 }
            },
            "urn:ietf:params:scim:schemas:extension:contoso:1.0:User": {
                "HireDate": "2021-05-01T00:00:00-05:00",
                "JobCode": "TG-1001"
            }            
        }
    },
    {
        "method": "POST",
        "bulkId": "701985",
        "path": "/Users",
        "data": {
            "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
            "urn:ietf:params:scim:schemas:extension:contoso:1.0:User"],
            "externalId": "701985",
            "userName": "Kjensen@example.com",
            "name": {
                "formatted": "Ms. Kathy J Jensen, III",
                "familyName": "Jensen",
                "givenName": "Kathy",
                "middleName": "Jane",
                "honorificPrefix": "Ms.",
                "honorificSuffix": "III"
            },
            "displayName": "Kathy Jensen",
            "nickName": "Kathy",
            "emails": [
            {
              "value": "kjensen@example.com",
              "type": "work",
              "primary": true
            }
            ],
            "addresses": [
            {
              "type": "work",
              "streetAddress": "100 Oracle City Plaza",
              "locality": "Hollywood",
              "region": "CA",
              "postalCode": "91618",
              "country": "USA",
              "formatted": "100 Oracle City Plaza\nHollywood, CA 91618 USA",
              "primary": true
            }
            ],
            "phoneNumbers": [
            {
              "value": "555-555-5545",
              "type": "work"
            }
            ],
            "userType": "Employee",
            "title": "Tour Lead",
            "preferredLanguage": "en-US",
            "locale": "en-US",
            "timezone": "America/Los_Angeles",
            "active":true,
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
              "employeeNumber": "701984",
              "costCenter": "4130",
              "organization": "Universal Studios",
              "division": "Theme Park",
              "department": "Tour Operations",
              "manager": {
                "value": "701984",
                "displayName": "Barbara Jensen"
             }
            },
            "urn:ietf:params:scim:schemas:extension:contoso:1.0:User": {
                "HireDate": "2022-07-15T00:00:00-05:00",
                "JobCode": "TL-1003"
            }            
        }
    }
],
    "failOnErrors": null
}

Étapes suivantes