Azure AD Graph API无法访问Microsoft帐户

时间:2015-05-14 13:52:27

标签: azure azure-active-directory

我在Azure AD中有2个用户

  1. Microsoft帐户用户
  2. Microsoft Azure Active Directory用户
  3. 用户2始终在Graph API调用中工作,但不在用户1中工作。

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

    (电子邮件实际上是url编码为testmail%40hotmail.com)。 这会产生以下错误 " {\" odata.error \":{\"代码\":\" Request_ResourceNotFound \" \"消息\":{\" lang \":\" en \",\"值\":\"资源& #39; testmail@hotmail.com'不存在或其查询的引用属性对象之一不存在。\"}}}"

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

    编辑: 我试图解决这个问题。我在上面的查询中使用UserPrincipal名称(.. users/testmail@hotmail.com?..)。对于内置域帐户,userPricipal名称为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),如何获取用户详细信息?

2 个答案:

答案 0 :(得分:1)

您在所发布的网址中遗漏了您的域名。它应该是

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

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

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

对于源自 Microsoft帐户的目录中的用户,mail属性为null。因此,您必须查看 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包含打破查询的字符(例如#,.)。您可以通过UPN过滤,但使用的命名约定用于源自Microsoft帐户的用户。假设您的目录中的用户的电子邮件是 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轻松浏览目录的Graph API和对象属性。

答案 1 :(得分:-1)

该过滤器可以工作,但您也可以在otherMails上过滤。您的原始查询无效,因为otherMails是一个多值属性 - 所以您需要使用" any":

https://graph.windows.net/tenantId/users?api-version=1.5& $滤波器= otherMails /任何(X:startswith(X,' testmail@hotmail.com'))

您何时使用此查找?是用户登录后还是某些人选择方案?

干杯,