【问题标题】:Azure AD Graph API cannot access Microsoft AccountAzure AD Graph API 无法访问 Microsoft 帐户
【发布时间】:2015-05-14 13:52:27
【问题描述】:

我在 Azure AD 中有 2 个用户

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

用户 2 总是在图形 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\":\"资源 '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) 中给出的。但是,即使我在 url 编码(testmail_hotmail.com%23EXT%23%40domain.com)之后将查询更改为“..users/testmail_hotmail.com#EXT#@domain.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),如何获取用户详细信息?

【问题讨论】:

    标签: azure azure-active-directory


    【解决方案1】:

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

    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 属性为空。因此,您必须像这样查看 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 轻松探索您的目录的 Graph API 和对象属性。

    【讨论】:

    • 当我在此页面中添加时,它是如何消失的。更正
    • 我明白了。不过,您仍然没有正确导航图表。我会更新我的答案。
    • 所以无法通过这种方式检索 MS 帐户(userPrincipalName)? graph.windows.net/tenantid/users/…。因为打电话时我只有电子邮件ID。不是objectid
    • 我在我的问题中添加了一个已编辑的部分。如果我只有一封电子邮件,那么我将如何通过 API 获取用户详细信息?
    • 好的,所以您需要仅使用 UPN 的完整用户帐户。知道了。我刚刚更新了答案。希望这会有所帮助。
    【解决方案2】:

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

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

    您何时使用此查找?是用户登录后还是有人挑选场景?

    干杯,

    【讨论】:

    • 这是为了获得更多的亲自签名的细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多