Не может запрашивать у пользователей файлы OneDrive для бизнеса как глобального администратора с помощью Microsoft Graph - PullRequest
0 голосов
/ 30 апреля 2018

Зайдя в систему и авторизовавшись как глобальный администратор в подписке O365 Enterprise, я могу отправлять запросы всем пользователям с помощью Microsoft Graph. Я также могу запросить отдельных пользователей с помощью User.Id.

Но когда я пытаюсь запросить файлы OneDrive (DriveItem) для любого пользователя, я получаю пустой ответ, и ресурс не найден. Та же ошибка, когда я использую UserPrincipalName вместо Id.

образец запроса:

/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/items

Каков шаблон вызова для глобального администратора для запроса дисков / элементов дисков всех пользователей в арендаторе?

Я уже дал согласие администратора приложению на следующие разрешения:

public static string[] Scopes = {
    "Files.ReadWrite.All",
    "Sites.Read.All",
    "Sites.ReadWrite.All",
    "Sites.FullControl.All",
    "User.ReadWrite.All",
    "Directory.ReadWrite.All",
    "Directory.AccessAsUser.All"
};

Я использую делегированные разрешения и запрашиваю разрешения во время выполнения через код, используя класс PublicClientApplication, если это имеет значение.

Обновление: Я получаю ту же ошибку «Ресурс не найден» при вызове:

/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/root/children

Исходный код:

IGraphServiceUsersCollectionPage usersCollection =
   await graphClient.Users.Request().GetAsync();

foreach (User user in usersCollection)
{
   IDriveItemChildrenCollectionPage childrenCollection =
    await graphClient.Users[user.Id].Drive.Root.Children.Request().GetAsync();
}

Когда цикл Foreach повторяется в первый раз, первый пользователь регистрируется в Global Admin, и вызов Drive.Root.Children работает правильно, но при последующих итерациях для других пользователей выдается исключение с сообщением об ошибке:

{"Код: itemNotFound \ r \ nСообщение: ресурс не найден. \ R \ n \ r \ nВнутренняя ошибка \ r \ n"}

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

После нескольких дней проб и ошибок я нашел обходной путь к проблеме, который я опубликую в качестве ответа, чтобы помочь людям, имеющим подобные проблемы. Если будет предложено лучшее решение, я приму этот ответ, так что охота еще продолжается ..

Оказывается, что у администратора Global O365 по умолчанию нет доступа к просмотру папок и файлов OneDrive Business других пользователей в клиенте.

Что мне нужно было сделать, это:

  1. Войдите в систему в качестве глобального администратора на портале O365
  2. Перейдите в Центр администрирования> Пользователи
  3. Для каждого пользователя разверните Настройки OneDrive и нажмите «Доступ к файлам» Это дает разрешения на управление OneDrive этого пользователя.

После этого:

/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/root/children

возвращает должным образом все дочерние элементы, которыми управляют пользователи!

Я сказал, что приму лучший ответ, поэтому, чтобы определить лучше:

  1. Ответ, который показывает, как это сделать, с помощью кода

  2. Или ответ, который хотя бы показывает, как это сделать с меньшим количеством кликов. Представьте, что у арендатора 100 000 пользователей, глобальный администратор должен нажать эту кнопку «Доступ к файлам» для 100 000 пользователей один за другим! (опция массовых настроек недоступна) Это не очень хороший опыт и не практичное решение.

Лучший ответ будет: 1 + 2:)

UPDATE: Я нашел лучший обходной путь, то есть, если я устанавливаю разрешения в App Mod, в отличие от делегированных разрешений / User Mod. Тогда приложение получит доступ ко всем дискам / файлам всех пользователей на One Drive, и глобальному администратору не нужно будет предоставлять разрешения как таковые. Администратор предприятия должен будет дать согласие приложению только один раз за время его существования в корпоративном клиенте. С этим обновлением я приму этот ответ.

0 голосов
/ 30 апреля 2018

Вы не можете позвонить [/drive/items][1] напрямую. Вам нужно либо указать DriveItem.Id (т. Е. /drive/items/{id}), либо путь (т. Е. /drive/root/children).

Попробуйте вместо этого:

/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/root/children
...