Я создаю собственное приложение, использующее Microsoft Graph. Я хочу прочитать все файлы в OneDrive всех пользователей в организации через учетную запись администратора.

Я использую рабочий процесс авторизации OAUTH (Azure AD 2.0), чтобы получить код авторизации. После чего я получаю токен доступа и обновляю токен.

Однако, когда я пытаюсь получить доступ к диску любого пользователя:

graphClient.Drives["amit@csys.onmicrosoft.com"].Root.Request().GetAsync();
// where graphClient is instance of GraphServiceClient

Я получил:

generalException

Сообщение: служба вернула непредвиденное исключение.

Со стеком вызовов:

  at Microsoft.Graph.HttpProvider.<SendAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.Graph.BaseRequest.<SendRequestAsync>d__34.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.Graph.BaseRequest.<SendAsync>d__32`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.Graph.DriveItemRequest.<GetAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at OneDrive_Writer.OneDriveWriter.<loadRootDriveFolder>d__9d.MoveNext()

Есть ли способ, которым администратор может получить доступ ко всем файлам дисков других пользователей?

ПРИМЕЧАНИЕ. Я могу получить доступ к учетной записи администратора OneDrive, когда вхожу в систему как администратор.

1
Jude Aloysius 14 Ноя 2017 в 18:37

1 ответ

Лучший ответ

Индексатор дисков в вашем примере ожидает driveId, а не upn.

Предполагая, что ваши разрешения установлены правильно и у вас есть действующий токен доступа, вы сделаете что-то вроде этого.

// Access the users in the org.
var users = await graphClient.Users.Request().GetAsync();

// Get the drives for a user.
var drives = await graphClient.Users[users[0].Id].Drives.Request().GetAsync();

// Get the specific drive metadata for a user
var drive = await graphClient.Drives[drives[0].Id].Request().GetASync();
1
Michael Mainer 14 Ноя 2017 в 18:29