无法使用 Microsoft Graph 以全局管理员身份查询用户的 OneDrive For Business 文件
Cannot Query Users' OneDrive For Business Files As The Global Administrator using Microsoft Graph
在 O365 Enterprise 订阅中以全局管理员身份登录并通过身份验证,我可以使用 Microsoft Graph 查询所有用户。我还可以使用 User.Id
.
查询单个用户
但是,当我尝试为任何用户查询 OneDrive 文件 (DriveItem
) 时,我收到空响应和资源未找到错误。当我使用 UserPrincipalName
而不是 Id
.
时出现同样的错误
样品请求:
/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/items
全局管理员查询租户中所有用户的 drives/drive 项的调用模式是什么?
我已就这些权限向应用程序提供了管理员许可:
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
class 的代码请求权限。
更新:
我在调用时遇到相同的 "Resource Not Found" 错误:
/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 循环第一次迭代时,第一个用户是登录的全局管理员,并且对 Drive.Root.Children
的调用工作正常,但在其他用户的后续迭代中,抛出异常并显示错误消息:
{"Code: itemNotFound\r\nMessage: The resource could not be found.\r\n\r\nInner error\r\n"}
您不能直接调用 [/drive/items][1]
。您需要提供 DriveItem.Id
(即 /drive/items/{id}
)或路径(即 /drive/root/children
)。
试试这个:
/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/root/children
经过几天的反复试验,我找到了解决该问题的方法,我将 post 作为帮助遇到类似问题的人的答案。如果提供更好的解决方案,我会接受这个答案,所以搜索仍在进行中..
事实证明,全局 O365 管理员默认情况下无权查看租户中其他用户的 OneDrive Business 文件夹和文件。
我要做的是:
- 以全局管理员身份登录到 O365 门户
- 转到管理中心 > 用户
- 对于每个用户,展开 OneDrive 设置并单击 "Access files"
这会授予管理该用户的 OneDrive 的权限。
完成后:
/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/root/children
returns 正确地所有 children 用户驱动项目!
我说我会接受更好的答案,所以定义更好:
显示如何通过代码执行此操作的答案
或者至少说明如何以更少的点击次数执行此操作的答案。想象一下,如果租户有 10 万个用户,全局管理员必须为 10 万个用户逐一单击访问文件按钮! (没有可用的批量设置选项)这不是很好的体验,也不是实用的解决方案。
最佳答案是:1 + 2 :)
更新:
我找到了一个更好的解决方法,即如果我在 App Mod 中设置权限,而不是在 Delegated permissions/User Mod 中设置权限。然后该应用程序可以访问 One Drive 中所有用户的 drives/files,并且全局管理员不需要为自己提供这样的权限。企业管理员只需要在企业租户的生命周期内同意该应用程序一次。通过此更新,我将接受此答案。
在 O365 Enterprise 订阅中以全局管理员身份登录并通过身份验证,我可以使用 Microsoft Graph 查询所有用户。我还可以使用 User.Id
.
但是,当我尝试为任何用户查询 OneDrive 文件 (DriveItem
) 时,我收到空响应和资源未找到错误。当我使用 UserPrincipalName
而不是 Id
.
样品请求:
/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/items
全局管理员查询租户中所有用户的 drives/drive 项的调用模式是什么?
我已就这些权限向应用程序提供了管理员许可:
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
class 的代码请求权限。
更新: 我在调用时遇到相同的 "Resource Not Found" 错误:
/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 循环第一次迭代时,第一个用户是登录的全局管理员,并且对 Drive.Root.Children
的调用工作正常,但在其他用户的后续迭代中,抛出异常并显示错误消息:
{"Code: itemNotFound\r\nMessage: The resource could not be found.\r\n\r\nInner error\r\n"}
您不能直接调用 [/drive/items][1]
。您需要提供 DriveItem.Id
(即 /drive/items/{id}
)或路径(即 /drive/root/children
)。
试试这个:
/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/root/children
经过几天的反复试验,我找到了解决该问题的方法,我将 post 作为帮助遇到类似问题的人的答案。如果提供更好的解决方案,我会接受这个答案,所以搜索仍在进行中..
事实证明,全局 O365 管理员默认情况下无权查看租户中其他用户的 OneDrive Business 文件夹和文件。
我要做的是:
- 以全局管理员身份登录到 O365 门户
- 转到管理中心 > 用户
- 对于每个用户,展开 OneDrive 设置并单击 "Access files" 这会授予管理该用户的 OneDrive 的权限。
完成后:
/v1.0/users/427d0a15-69db-4ab1-b7ae-542776ef53ed/drive/root/children
returns 正确地所有 children 用户驱动项目!
我说我会接受更好的答案,所以定义更好:
显示如何通过代码执行此操作的答案
或者至少说明如何以更少的点击次数执行此操作的答案。想象一下,如果租户有 10 万个用户,全局管理员必须为 10 万个用户逐一单击访问文件按钮! (没有可用的批量设置选项)这不是很好的体验,也不是实用的解决方案。
最佳答案是:1 + 2 :)
更新: 我找到了一个更好的解决方法,即如果我在 App Mod 中设置权限,而不是在 Delegated permissions/User Mod 中设置权限。然后该应用程序可以访问 One Drive 中所有用户的 drives/files,并且全局管理员不需要为自己提供这样的权限。企业管理员只需要在企业租户的生命周期内同意该应用程序一次。通过此更新,我将接受此答案。