Azure AD Graph API 无法访问 Microsoft 帐户

Azure AD Graph API cannot access Microsoft Account

我在 Azure AD 中有 2 个用户

  1. Microsoft 帐户用户
  2. Microsoft Azure Active Directory 用户

用户 2 始终在 Graph API 调用中工作,但用户 1 不工作。

https://graph.windows.net/tenantid/users/testmail@hotmail.com?api-version=2013-04-05

(电子邮件实际上是 url 编码为 testmail%40hotmail.com)。 这给出了以下错误 "{\"odata.error\":{\"code\":\"Request_ResourceNotFound\",\"message\":{\"lang\":\"en\",\"value\":\"Resource 'testmail@hotmail.com' does not exist or one of its queried reference-property objects are not present.\"}}}"

有人知道如何解决这个问题吗?

已编辑: 我想出的办法来解决这个问题。我在上面的查询中使用了 UserPrincipal 名称 (..users/testmail@hotmail.com?..)。对于内置域帐户,userPrincipal 名称是 testmail@domain.com(这有效),但对于 Microsoft 帐户,userPrincipal 名称是 testmail_hotmail.com#EXT#@domain.com。这是在所有用户列表 (https://graph.windows.net/tenantid/users?api-version=2013-04-05) 中给出的。但即使我将查询更改为 '..users/testmail_hotmail.com#EXT#@domain.com?..' 当然在 url 编码之后(testmail_hotmail.com %23EXT%23%40domain.com), 仍然不起作用。 Objectid 始终适用于所有帐户 (..users/objectId?..) 。

也试过其他邮件。可能 api 是错误的,因为 otherMails 是一个数组。 "https://graph.windows.net/tenantId/Users?$filter=otherMails eq 'testmail%40hotmail.com'&api-version=2013-04-05"

所以问题依然存在。如果在拨打电话时只有电子邮件可用于 MS 帐户(不是 objectid),如何获取用户详细信息?

您在发布的 URL 中缺少您的域。应该是

https://graph.windows.net/[your Azure AD domain]/users

要获取用户的电子邮件地址,您需要在请求中添加用户的对象 ID URL。因此,例如,要获得一个 Azure AD 用户,它会是这样的:

https://graph.windows.net/[your Azure AD domain]/users/[object ID of user]/mail

对于来自 Microsoft 帐户 的目录中的用户,邮件 属性 为空。因此,您必须像这样查看 otherMails 属性:

https://graph.windows.net/[your Azure AD domain]/users/[object ID of user]/otherMails

如果您想使用用户的 UPN 访问完整的用户帐户,您可以为来自 Azure AD 的用户执行此操作。例如,对于租户域 contoso.com 和具有 UPN johndoe@contoso.com 的用户,查询将如下所示:

https://graph.windows.net/contoso.com/users/johndoe@contoso.com

这不适用于来自 Microsoft 帐户的用户。对于这些帐户,UPN 包含中断查询的字符(例如#、.)。您可以使用用于来自 Microsoft 帐户的用户的命名约定,按 UPN 进行筛选。假设您的目录中有一个用户,其电子邮件地址为 jayhamlin@yahoo.com。 UPN 类似于 jayhamlin_yahoo.com#EXT#@contoso.com。因此,您可以使用过滤器并像这样查找 UPN 的第一部分:

https://graph.windows.net/contoso.com/users?api-version=2013-11-08&$filter=startswith(userPrincipalName, 'jayhamlin_yahoo')

您可以使用 https://graphexplorer.cloudapp.net 轻松浏览目录的图形 API 和对象属性。

该过滤器可以工作,但您也可以对其他邮件进行过滤。您的原始查询不起作用,因为 otherMails 是一个多值 属性- 因此您需要使用 "any":

https://graph.windows.net/tenantId/users?api-version=1.5&$filter=otherMails/any(x:startswith(x,'testmail@hotmail.com'))

您什么时候使用此查找?是用户登录后还是某些人选择场景?

干杯,