Настройка синхронизации с пользовательскими целевыми атрибутами
Пространство имен: microsoft.graph
Схему синхронизации можно настроить так, чтобы она включала настраиваемые атрибуты, определенные в целевом каталоге. В этой статье описывается настройка подписки Salesforce путем добавления нового поля с именем officeCode
. Вы настроили синхронизацию из Azure Active Directory (Azure AD) в Salesforce и для каждого пользователя заполните officeCode
поле в Salesforce значением из extensionAttribute10
поля в Azure AD.
В этой статье предполагается, что вы уже добавили приложение, которое поддерживает синхронизацию с клиентом на портале Azure, знаете отображаемое имя приложения и что у вас есть маркер авторизации для Microsoft Graph. Сведения о том, как получить маркер авторизации, см. в статье Получение маркеров доступа для вызова Microsoft Graph.
Поиск объекта субъекта-службы по отображаемого имени
В следующем примере показано, как найти объект субъекта-службы с отображаемым именем Salesforce.
Запрос
GET https://graph.microsoft.com/beta/servicePrincipals?$select=id,appId,displayName&$filter=startswith(displayName, 'salesforce')
Authorization: Bearer {Token}
Отклик
HTTP/1.1 200 OK
Content-Type: application/json
{
"@odata.context": "https://graph.microsoft.com/beta/$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}
значение 167e33e9-f80e-490e-b4d8-698d4a80fb3e
.
Вывод списка заданий синхронизации в контексте субъекта-службы
В следующем примере показано, как получить jobId
объект , с которым необходимо работать. Как правило, ответ возвращает только одно задание.
Запрос
GET https://graph.microsoft.com/beta/servicePrincipals/60443998-8cf7-4e61-b05c-a53b658cb5e1/synchronization/jobs
Authorization: Bearer {Token}
Отклик
HTTP/1.1 200 OK
Content-Type: application/json
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#servicePrincipals('60443998-8cf7-4e61-b05c-a53b658cb5e1')/synchronization/jobs",
"value": [
{
"id": "SfSandboxOutDelta.e4bbf44533ea4eabb17027f3a92e92aa",
"templateId": "SfSandboxOutDelta",
"schedule": {},
"status": {}
}
]
}
Имеет {jobId}
значение SfSandboxOutDelta.e4bbf44533ea4eabb17027f3a92e92aa
.
Получение схемы синхронизации
В следующем примере показано, как получить схему синхронизации.
GET https://graph.microsoft.com/beta/servicePrincipals/{servicePrincipalId}/synchronization/jobs/{jobId}/schema
Authorization: Bearer {Token}
Примечание. Объект отклика, показанный здесь, может быть сокращен для удобочитаемости. Все свойства будут возвращены в фактическом вызове.
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"
}
]
}
]
}
Добавление определения для атрибута officeCode и сопоставления между атрибутами
Используйте редактор обычного текста по своему выбору (например, Блокнот++ или редактор JSON Online), чтобы:
Добавьте определение атрибута для атрибута
officeCode
.- В разделе каталоги найдите каталог с именем salesforce.com, а в массиве объекта найдите каталог с именем User.
- Добавьте новый атрибут в список, указав имя и тип, как показано в следующем примере.
Добавьте сопоставление атрибутов между
officeCode
иextensionAttribute10
.- В разделе synchronizationRules найдите правило, указывающее Azure AD в качестве исходного каталога, а Salesforce.com в качестве целевого каталога (
"sourceDirectoryName": "Azure Active Directory", "targetDirectoryName": "salesforce.com"
). - В objectMappings правила найдите сопоставление между пользователями (
"sourceObjectName": "User", "targetObjectName": "User"
). - В массиве attributeMappingsобъекта objectMapping добавьте новую запись, как показано в следующем примере.
- В разделе synchronizationRules найдите правило, указывающее Azure AD в качестве исходного каталога, а Salesforce.com в качестве целевого каталога (
{
"directories": [
{
"id": "8ffa6169-f354-4751-9b77-9c00765be92d",
"name": "salesforce.com",
"objects": [
{
"attributes": [
{
"name": "officeCode",
"type": "String"
}
],
"name":"User"
}]
}
],
"synchronizationRules": [
{
"editable": true,
"id": "4c5ecfa1-a072-4460-b1c3-4adde3479854",
"name": "USER_OUTBOUND_USER",
"objectMappings": [
{
"attributeMappings": [
{
"source": {
"name": "extensionAttribute10",
"type": "Attribute"
},
"targetAttributeName": "officeCode"
}
],
"name": "Synchronize Azure Active Directory Users to salesforce.com",
"scope": null,
"sourceObjectName": "User",
"targetObjectName": "User"
}
],
"priority": 1,
"sourceDirectoryName": "Azure Active Directory",
"targetDirectoryName": "salesforce.com"
}
]
}
Сохранение измененной схемы синхронизации
При сохранении обновленной схемы синхронизации убедитесь, что вы включили всю схему, включая неизмененные части. Этот запрос заменит существующую схему указанной схемой.
PUT https://graph.microsoft.com/beta/servicePrincipals/{servicePrincipalId}/synchronization/jobs/{jobId}/schema
Authorization: Bearer {Token}
{
"directories": [..],
"synchronizationRules": [..]
}
Если схема была успешно сохранена, запрос возвращает 204 No Content
код ответа. При следующей итерации задания синхронизации начнется повторная обработка всех учетных записей в Azure AD, а новые сопоставления будут применены ко всем подготовленным учетным записям.