Configuración de la sincronización con atributos de extensión de directorio

Espacio de nombres: microsoft.graph

Puede personalizar el esquema de sincronización para incluir Microsoft Entra atributos de extensión de directorio. En este artículo se describe cómo usar un atributo de extensión de directorio (extension_9d98asdfl15980a_Nickname) para rellenar el valor de User.CommunityNickname en Salesforce. En este escenario, tiene Microsoft Entra Connect configurado para aprovisionar una serie de atributos de extensión de directorio de Windows Server Active Directory local a Microsoft Entra ID.

En este artículo se supone que ya ha agregado una aplicación que admite la sincronización con el inquilino mediante el Centro de administración Microsoft Entra, que conoce el nombre para mostrar de la aplicación y que tiene un token de autorización para Microsoft Graph. Para obtener información sobre cómo obtener el token de autorización, consulte Obtención de tokens de acceso para llamar a Microsoft Graph.

Búsqueda del objeto de entidad de servicio por nombre para mostrar

En el ejemplo siguiente se muestra cómo buscar un objeto de entidad de servicio con el nombre para mostrar "Salesforce Sandbox".

Solicitud

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

Respuesta

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"
    }
    ]
}

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

Enumeración de trabajos de sincronización en el contexto de la entidad de servicio

En el ejemplo siguiente se muestra cómo obtener el objeto con el jobId que necesita trabajar. Por lo general, la respuesta devuelve solo un trabajo.

Solicitud

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

Respuesta

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": {}
    }
    ]
}

{jobId} es SfSandboxOutDelta.e4bbf44533ea4eabb17027f3a92e92aa.

Busque el nombre del atributo de extensión de directorio que necesita.

Necesitará el nombre completo del atributo de extensión. Si no conoce el nombre completo (que debería ser similar a extension_9d98asdfl15980a_Nickname), consulte la siguiente información sobre los atributos de extensión de directorio y cómo inspeccionarlos:

Obtención del esquema de sincronización

En el ejemplo siguiente se muestra cómo obtener el esquema de sincronización.

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

Nota: Se puede acortar el objeto de respuesta que se muestra aquí para mejorar la legibilidad. Todas las propiedades se devolverán en una llamada real.

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"
        }
      ]
    }
  ]
}

Agregar una definición para el atributo de extensión de directorio y una asignación entre los atributos

Use un editor de texto sin formato de su elección (por ejemplo, Notepad++ o JSON Editor Online) para:

  1. Agregue una definición de atributo para el extension_9d98asdfl15980a_Nickname atributo .

    • En directorios, busque el directorio con el nombre "Microsoft Entra ID" y, en la matriz del objeto, busque el denominado User.
    • Agregue el nuevo atributo a la lista, especificando el nombre y el tipo, como se muestra en el ejemplo siguiente.
  2. Agregue una asignación de atributos entre extension_9d98asdfl15980a_Nickname y CommunityNickname.

    • En synchronizationRules, busque la regla que especifica Microsoft Entra ID como directorio de origen y Salesforce.com como directorio de destino ("sourceDirectoryName": "Azure Active Directory", "targetDirectoryName": "salesforce.com").
    • En objectMappings de la regla, busque la asignación entre los usuarios ("sourceObjectName": "User", "targetObjectName": "User").
    • En la matriz attributeMappings del objetoMapping, agregue una nueva entrada, como se muestra en el ejemplo siguiente.
    {
        "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"
            },
        ]
    }
    

Guardar el esquema de sincronización modificado

Al guardar el esquema de sincronización actualizado, asegúrese de incluir todo el esquema, incluidos los elementos sin modificar. Esta solicitud reemplazará el esquema existente por el que proporcione.

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

Si el esquema se guardó correctamente, la solicitud devuelve un código de 204 No Content respuesta. En la siguiente iteración del trabajo de sincronización, comenzará a volver a procesar todas las cuentas de la Microsoft Entra ID y las nuevas asignaciones se aplicarán a todas las cuentas aprovisionadas.