【问题标题】:Why is Microsoft Graph more restrictive?为什么 Microsoft Graph 更严格?
【发布时间】:2017-12-19 05:32:00
【问题描述】:

在 Outlook 中,我可以查找组织中的所有用户,包括电话号码、地址等。 我想使用 EWS 我可以做同样的事情...... 使用 Azure AD 图 (https://graph.windows.net),我也可以获取所有 (GAL) 用户的所有(!)属性 - 无需选择较小的属性子集……

在 Microsoft Graph (https://graph.microsoft.com) 中,我可以获取所有用户 (GAL),但不能获取(所有)属性,如电话号码、标题等,没有管理员允许访问……为什么这与另一个不同(更受限制) API?

例如。许可; Directory.AccessAsUser.All(以登录用户访问目录)

  • 在 Microsoft Graph 中,用户无法同意
  • 在 Azure AD Graph 中 - 不需要管理员

使用 Microsoft Graph 中的 /me/people(预览版),我可以获得组织中许多用户的所有属性 - 但不是全部。而且我可能会获得一些我最近的同事无法获得的用户(为什么? - 它仍然存在问题)

每个人都告诉你使用 Microsoft Graph,但它似乎比旧 API 更受限制

【问题讨论】:

    标签: microsoft-graph-api azure-ad-graph-api


    【解决方案1】:

    我很想进一步了解您所描述的限制性质。在大多数情况下(关于目录/Azure AD),Microsoft Graph 公开由与 Azure AD Graph 相同的权限模型保护的相同数据。请参阅https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#user-permissions,了解有关可用用户权限及其允许内容的更多详细信息。

    您可能会在 Microsoft Graph 中看到这样一个事实,即当您查询 v1.0 中的 /users 实体集(即GET https://graph.microsoft.com/v1.0/users)时,Microsoft Graph 默认仅返回一组关键的用户属性。 user 实体类型非常大,并且一直在增长——它有 40 多个属性和 25 个导航属性。对大型对象进行序列化和反序列化,尤其是当分页集合对于客户端和 Microsoft Graph 服务而言代价高昂且性能不佳时。因此,我们返回一个默认集。如果您想要其他属性,则需要使用$select 参数。例如:GET https://graph.microsoft.com/v1.0/users?$select=displayName,givenName, officeLocation,postalCode,state。这在此处记录:例如https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/user_get,但我们也在努力对该领域的文档进行一些改进。如果您想查看 Microsoft Graph user 实体类型公开的完整属性集,请查看此处的架构:https://graph.microsoft.com/v1.0/$metadata。

    [注意:Azure AD Graph API 不支持 $select,因此我们总是返回完整集]。

    人员 API - ../me/people 是关于您(登录用户)最常与之交流的人员 - 它也可能包含您组织之外的人员。因此,每个用户(甚至是同事)的人员列表可能是特定的且不同的。它也不是您组织中用户的完整目录。

    我还想深入了解您在同意方面看到差异的原因 - Directory.AccessAsUser.All 始终需要 Web 应用程序的管理员同意(对于 Microsoft 和 Azure AD Graph)。

    希望这会有所帮助,

    【讨论】:

    • 同时使用 Graph Explorers 我可以在 Azure AD Graph Explorer 中获得比 Microsoft Graph Explorer 更多的用户和“非空”属性...我无法使用 Microsoft Graph 获取电话号码、职位等等,但是这些属性是在 Azure AD Graph Explorer 中填充的……默认集(包含 11 个属性)实际上包含我目前需要的所有属性。它返回信息; id、displayName、givenName、mail、surname 和 userprincipalname - 而businessPhones、jobTitle、mobilePhone、officeLocation(和preferredLangiage)对于所有用户都是空的。
    • 无论如何我们都不会使用 /people API,但它确实为我们提供了缺失的属性...似乎只返回最多 1000 条记录 - 但无论我使用什么过滤器,这 1000 条(pr.用户)是否正在使用或者是公关。过滤器(?)
    • 我在 Azure 门户中获得了“仅限 Azure AD 的应用程序”(Web 应用程序/API)。在“所需权限”部分,我添加了对“Microsoft Graph”和“Windows Azure Active Directory (Microsoft.Azure.ActiveDirectory)”的访问权限。在“委派权限”部分,我看到以下内容:* Microsoft Graph:“以登录用户身份访问目录”有一个绿色图标,带有“是”作为“需要管理员” * Windows Azure AD:“以登录用户”有一个红色图标和“否”作为“需要管理员”
    • 此外,在AAD Graph Explorer 中,我可以查询https://graph.windows.net/myorganization/users 并查看每个用户的多个电话号码:facsimileTelephoneNumbertelephoneNumbermobile。但是在MS Graph Explorer 和我查询https://graph.microsoft.com/v1.0/users 中,我看到businessPhones 的空数组和每个用户的空mobilePhone。我确保将在 AAD Graph 中显示电话号码的用户与他们在 MS Graph 中的结果进行比较。
    • 我认为这是一个权限问题。我注意到,当我使用 /users/ 查询 MS Graph 时,我可以看到我的公司和手机号码,但我的同事在进行相同查询时不能看到,反之亦然。我现在无法对其进行测试,但我认为需要“读取所有用户的完整个人资料”的管理员权限才能读取这些电话号码。
    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2011-03-09
    • 1970-01-01
    • 2020-11-26
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多