Configurer la synchronisation avec les attributs d’extension d’annuaire

Espace de noms: microsoft.graph

Vous pouvez personnaliser votre schéma de synchronisation pour inclure Microsoft Entra attributs d’extension d’annuaire. Cet article explique comment utiliser un attribut d’extension d’annuaire (extension_9d98asdfl15980a_Nickname) pour remplir la valeur de User.CommunityNickname dans Salesforce. Dans ce scénario, vous avez configuré Microsoft Entra Connect pour provisionner un certain nombre d’attributs d’extension d’annuaire de Windows Server Active Directory local vers Microsoft Entra ID.

Cet article part du principe que vous avez déjà ajouté une application qui prend en charge la synchronisation avec votre locataire via le centre d'administration Microsoft Entra, que vous connaissez le nom complet de l’application et que vous disposez d’un jeton d’autorisation pour Microsoft Graph. Pour plus d’informations sur la façon d’obtenir le jeton d’autorisation, consultez Obtenir des jetons d’accès pour appeler Microsoft Graph.

Rechercher l’objet principal de service par nom d’affichage

L’exemple suivant montre comment rechercher un objet principal de service avec le nom complet « Salesforce Sandbox ».

Demande

GET https://graph.microsoft.com/v1.0/servicePrincipals?$select=id,appId,displayName&$filter=startswith(displayName, 'salesforce')
Authorization: Bearer {Token}

Réponse

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals(id,appId,displayName)",
    "value": [
    {
        "id": "167e33e9-f80e-490e-b4d8-698d4a80fb3e",
        "appId": "cd3ed3de-93ee-400b-8b19-b61ef44a0f29",
        "displayName": "Salesforce"
    },
    {
        "id": "8cbbb70b-7290-42da-83ee-89fa3517a977",
        "appId": "b0f2e3b1-fe31-4658-b216-44dcaeabb63a",
        "displayName": "salesforce 1"
    },
    {
        "id": "60443998-8cf7-4e61-b05c-a53b658cb5e1",
        "appId": "79079396-c301-405d-900f-e2e0c2439a90",
        "displayName": "Salesforce Sandbox"
    }
    ]
}

est {servicePrincipalId}60443998-8cf7-4e61-b05c-a53b658cb5e1.

Répertorier les travaux de synchronisation dans le contexte du principal de service

L’exemple suivant vous montre comment obtenir le jobId que vous devez utiliser. En règle générale, la réponse ne retourne qu’un seul travail.

Demande

GET https://graph.microsoft.com/v1.0/servicePrincipals/60443998-8cf7-4e61-b05c-a53b658cb5e1/synchronization/jobs
Authorization: Bearer {Token}

Réponse

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('60443998-8cf7-4e61-b05c-a53b658cb5e1')/synchronization/jobs",
    "value": [
        {
            "id": "SfSandboxOutDelta.e4bbf44533ea4eabb17027f3a92e92aa",
            "templateId": "SfSandboxOutDelta",
            "schedule": {},
            "status": {}
    }
    ]
}

est {jobId}SfSandboxOutDelta.e4bbf44533ea4eabb17027f3a92e92aa.

Rechercher le nom de l’attribut d’extension d’annuaire dont vous avez besoin

Vous aurez besoin du nom complet de l’attribut d’extension. Si vous ne connaissez pas le nom complet (qui doit ressembler à extension_9d98asdfl15980a_Nickname), consultez les informations suivantes sur les attributs d’extension d’annuaire et la façon de les inspecter :

Obtenir le schéma de synchronisation

L’exemple suivant montre comment obtenir le schéma de synchronisation.

GET https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalId}/synchronization/jobs/{jobId}/schema
Authorization: Bearer {Token}

Remarque : l’objet de réponse affiché ci-après peut être raccourci pour plus de lisibilité. Toutes les propriétés seront retournées dans un appel réel.

HTTP/1.1 200 OK
Content-Type: application/json

{
  "directories": [
    {
      "id": "66e4a8cc-1b7b-435e-95f8-f06cea133828",
      "name": "Azure Active Directory",
      "objects": [
        {
          "attributes": [
            {
              "anchor": true,
              "caseExact": false,
              "defaultValue": null,
              "metadata": [],
              "multivalued": false,
              "mutability": "ReadWrite",
              "name": "objectId",
              "required": false,
              "referencedObjects": [],
              "type": "String"
            },
            {
              "anchor": false,
              "caseExact": false,
              "defaultValue": null,
              "metadata": [],
              "multivalued": false,
              "mutability": "ReadWrite",
              "name": "streetAddress",
              "required": false,
              "referencedObjects": [],
              "type": "String"
            }
          ],
          "name": "User"
        }
      ]
    },
    {
      "id": "8ffa6169-f354-4751-9b77-9c00765be92d",
      "name": "salesforce.com",
      "objects": []
    }
  ],
  "synchronizationRules": [
    {
      "editable": true,
      "id": "4c5ecfa1-a072-4460-b1c3-4adde3479854",
      "name": "USER_OUTBOUND_USER",
      "objectMappings": [
        {
          "attributeMappings": [
            {
              "defaultValue": "True",
              "exportMissingReferences": false,
              "flowBehavior": "FlowWhenChanged",
              "flowType": "Always",
              "matchingPriority": 0,
              "source": {
                "expression": "Not([IsSoftDeleted])",
                "name": "Not",
                "parameters": [
                  {
                    "key": "source",
                    "value": {
                      "expression": "[IsSoftDeleted]",
                      "name": "IsSoftDeleted",
                      "parameters": [],
                      "type": "Attribute"
                    }
                  }
                ],
                "type": "Function"
              },
              "targetAttributeName": "IsActive"
            }
          ],
          "enabled": true,
          "flowTypes": "Add, Update, Delete",
          "name": "Synchronize Azure Active Directory Users to salesforce.com",
          "scope": null,
          "sourceObjectName": "User",
          "targetObjectName": "User"
        }
      ]
    }
  ]
}

Ajouter une définition pour l’attribut d’extension d’annuaire et un mappage entre les attributs

Utilisez un éditeur de texte brut de votre choix (par exemple, Bloc-notes++ ou JSON Rédacteur Online) pour :

  1. Ajoutez une définition d’attribut pour l’attribut extension_9d98asdfl15980a_Nickname .

    • Sous répertoires, recherchez le répertoire nommé « Microsoft Entra ID » et, dans le tableau de l’objet, recherchez celui nommé Utilisateur.
    • Ajoutez le nouvel attribut à la liste, en spécifiant le nom et le type, comme illustré dans l’exemple suivant.
  2. Ajoutez un mappage d’attribut entre extension_9d98asdfl15980a_Nickname et CommunityNickname.

    • Sous synchronizationRules, recherchez la règle qui spécifie Microsoft Entra ID comme répertoire source et Salesforce.com comme répertoire cible ("sourceDirectoryName": "Azure Active Directory", "targetDirectoryName": "salesforce.com").
    • Dans objectMappings de la règle, recherchez le mappage entre les utilisateurs ("sourceObjectName": "User", "targetObjectName": "User").
    • Dans le tableau attributeMappings de l’objetMapping, ajoutez une nouvelle entrée, comme illustré dans l’exemple suivant.
    {
        "directories": [
            {
                "id": "66e4a8cc-1b7b-435e-95f8-f06cea133828",
                "name": "Azure Active Directory",
                "objects": [
                    {
                        "attributes": [
                                ,{
                                "name": "extension_9d98asdfl15980a_Nickname",
                                "type": "String"
                                }
                        ],
                        "name":"User"
                    }]
            }
        ],
        "synchronizationRules": [
            {
            "editable": true,
            "id": "4c5ecfa1-a072-4460-b1c3-4adde3479854",
            "metadata": [..],
            "name": "USER_OUTBOUND_USER",
            "objectMappings": [
                {
                    "attributeMappings": [
                    ,{
                        "source": {
                            "name": "extension_9d98asdfl15980a_Nickname",
                            "type": "Attribute"
                        },
                        "targetAttributeName": "CommunityNickname"
                        }
                ],
                "name": "Synchronize Azure Active Directory Users to salesforce.com",
                    "scope": null,
                    "sourceObjectName": "User",
                    "targetObjectName": "User"
                }
            ],
            "priority": 1,
            "sourceDirectoryName": "Azure Active Directory",
            "targetDirectoryName": "salesforce.com"
            },
        ]
    }
    

Enregistrer le schéma de synchronisation modifié

Lorsque vous enregistrez le schéma de synchronisation mis à jour, veillez à inclure l’intégralité du schéma, y compris les parties non modifiées. Cette demande remplace le schéma existant par celui que vous fournissez.

PUT https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalId}/synchronization/jobs/{jobId}/schema
Authorization: Bearer {Token}
{
    "directories": [],
    "synchronizationRules": []
}

Si le schéma a été enregistré avec succès, la requête retourne un 204 No Content code de réponse. Lors de la prochaine itération du travail de synchronisation, il commencera à rétraiter tous les comptes de votre Microsoft Entra ID, et les nouveaux mappages seront appliqués à tous les comptes provisionnés.