我已成功使用 Office 365 统一 API 将我的多租户 SaaS 应用程序链接到 Office 365 并返回统一组的文件。我正在使用 ADAL 库和统一 API nuget 包来实现这一点。根据统一 API 预览版发布说明,我们已在 Azure AD 应用程序中请求以下权限(以及其他权限) - Group.Read.All、Group.ReadWrite.All、Sites.Read.All、Sites.ReadWrite.All。我很欣赏 ReadWrite 使 Read 变得不必要,但我们添加了这两个集合以尝试保护自己免受一些可能的预览问题的影响。
现在我们有一个租户可以读取他们的组但不能访问组中的文件。这在其他租户中运行良好。
当我们调试代码时,我们发现这行抛出了一个空引用异常:
IPagedCollection<IItem> files = await _client.groups.GetByID(groupId).files.ExecuteAsync()
然后,我们将其分开以检查该组是否可以正常接收:
IGroup group = await _client.groups.GetById(groupId).ExecuteAsync()
因此,我们使用 HTTP 客户端发出了相同的文件请求,以便我们可以从服务器获得更详细的响应:
https://graph.microsoft.com/beta/myOrganization/groups/[group_id_here]/files
这将返回状态代码 500 - 内部服务器错误,内容是“对象引用未设置为对象的实例”。不是很有帮助!
我已经看到一些关于人们遇到类似问题的主题,权限设置不正确,但在我的情况下,我不明白为什么检索统一组文件的调用在一个 Office 365 租户中可以正常工作,但在另一个租户中却不能正常工作。由同一个 Azure AD 应用程序控制,因此完全相同。
这些组都是在 Office 365 Web 应用程序中创建的,而不是通过统一 API 创建的,因此这不是一个因素。
管理员可以使用 Office 365 中的权限来限制对统一 api 请求的访问吗?我在文档中看不到任何内容,但即使是这种情况,我也希望得到未经授权的响应,而不是内部服务器错误。
任何想法都非常感谢!