Попытка использовать API MS Graph из HTTP-клиента OAuth 2.0, прошедшего проверку подлинности с помощью регистрации приложения Azure, для вывода списка и создания папок контактов и контактов для любого пользователя с лицензией O365 в одном и том же клиенте. Вызовы API Graph от Postman возвращают действительные результаты JSON, только если целевой пользователь является пользователем Azure Global Administrator, который предоставил разрешение администратора MS Graph API для всего клиента Azure. Попытка получить доступ к контактам или папкам контактов любого другого пользователя-арендатора приводит к ответу об ошибке JSON отказа в доступе.
Согласно документации MS, регистрация приложений Azure, API MS Graph, разрешение администратора, тип приложения «Контакты». ReadWrite должен разрешать доступ ко всем папкам контактов и контактам пользователей.
Однако это толькоработает, чтобы получить контактные папки и контакты пользователя Admin, который согласился с правами администратора. Разрешение «Разрешено администратором», «Тип приложения» ведет себя как разрешение «Разрешено администратором», «Делегированный тип».
Если регистрация приложения с согласием администратора не разрешена, разрешение «Тип приложения« Контакты »разрешает доступ ко всем контактам пользователя-арендатора безнеобходимо, чтобы каждый конечный пользователь дал согласие на доступ?
Это ошибка или ожидаемое поведение при доступе к контактам?
Почему для разрешения на чтение и запись контактов нет ограничения "Все"?
Для разрешений, которые не предлагают элемент ограничения «Все» в имени разрешения, игнорирует ли регистрация приложения «Соглашение с администратором типа приложения» и по умолчанию для пользователя, который дал согласие, работая вместо этого как пользователь? Разве это не идет вразрез с тем, чтобы иметь разрешения «Согласие администратора» и «Тип приложения»?
Нужно ли каждому делегату делегировать доступ к папке контактов и контактам для пользователя Admin?
1) Созданрегистрация приложения Azure 2) Предоставленные Microsoft Graph API, тип приложения, разрешения для этой регистрации приложения Azure для:
https://graph.microsoft.com/Group.ReadWrite.All https://graph.microsoft.com/Directory.Read.All https://graph.microsoft.com/Contacts.ReadWrite
3) Предоставленные Microsoft Graph API, делегированный тип, разрешения для этой регистрации приложения Azure для:
offline_access
4) Сконфигурированный токен доступа OAuth 2.0 Почтальона с областью действия:
offline_access https://graph.microsoft.com/Group.ReadWrite.All https://graph.microsoft.com/Directory.Read.All https://graph.microsoft.com/Contacts.ReadWrite
Данные [ОПРЕДЕЛЕНЫ] из приведенного ниже примера.
Получить контактыПользователь Azure Global Administrator (пример: admin_user@fake.com), предоставивший согласие администратора на тип приложения API MS Graph Разрешения:
ЗАПРОС:
https://graph.microsoft.com/v1.0/users/admin_user@fake.com/contacts
ОТВЕТ:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('admin_user%40fake.com')/contacts",
"value": [
{
"@odata.etag": "W/\"[OMITTED]\"",
"id": "[OMITTED]",
"createdDateTime": "2019-10-25T17:11:06Z",
"lastModifiedDateTime": "2019-10-30T13:11:13Z",
"changeKey": "[OMITTED]",
"categories": [],
"parentFolderId": "[OMITTED]",
"birthday": null,
"fileAs": "test, Test",
"displayName": "Test test",
"givenName": "Test",
"initials": null,
"middleName": null,
"nickName": null,
"surname": "test",
"title": null,
"yomiGivenName": null,
"yomiSurname": null,
"yomiCompanyName": null,
"generation": null,
"imAddresses": [],
"jobTitle": null,
"companyName": null,
"department": null,
"officeLocation": null,
"profession": null,
"businessHomePage": null,
"assistantName": null,
"manager": null,
"homePhones": [
"666-666-6666"
],
"mobilePhone": "555-555-5555",
"businessPhones": [
"777-777-7777"
],
"spouseName": null,
"personalNotes": "Test",
"children": [],
"emailAddresses": [],
"homeAddress": {},
"businessAddress": {},
"otherAddress": {}
}
]
}
Попробуйте получить контакты любого другого пользователя с лицензией O365 (пример: other_user@fake.com):
ЗАПРОС:
https://graph.microsoft.com/v1.0/users/other_user@fake.com/contacts
ОТВЕТ:
{
"error": {
"code": "ErrorAccessDenied",
"message": "Access is denied. Check credentials and try again.",
"innerError": {
"request-id": "[OMITTED]",
"date": "2019-11-04T16:40:58"
}
}
}
Получите контактные папки пользователя Azure Global Administrator (пример: admin_user@fake.com), которому предоставлено согласие администратора на тип приложения API MS Graph. Разрешения:
ЗАПРОС:
https://graph.microsoft.com/v1.0/users/admin_user@fake.com/contactfolders
ОТВЕТ:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('admin_user%40fake.com')/contactFolders",
"value": [
{
"id": "[OMITTED]",
"parentFolderId": "[OMITTED]",
"displayName": "Test Contacts Folder"
}
]
}
Попробуйте получить папки с контактами любого другого пользователя с лицензией O365 (пример: other_user@fake.com):
ЗАПРОС:
https://graph.microsoft.com/v1.0/users/other_user@fake.com/contactfolders
ОТВЕТ:
{
"error": {
"code": "ErrorAccessDenied",
"message": "Access is denied. Check credentials and try again.",
"innerError": {
"request-id": "[OMITTED]",
"date": "2019-11-04T16:49:42"
}
}
}
Текущий перманент при регистрации приложения