微软图形API:获取用户组织

3
我正在使用Microsoft Graph API获取用户的一些详细信息,并且我还使用AD进行身份验证和授权。
在这个应用程序中,用户在登录后将搜索一些用户并需要所有匹配搜索的用户的一些详细信息。
我使用以下用户API进行过滤查询,但是没有获得任何有关匹配用户公司名称的详细信息。
https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'jo')

以下是相同的响应:
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
  "@odata.nextLink": "https://graph.microsoft.com/v1.0/users?$skiptoken=X%2744537074020001000000203A636F6D7061735F766A61407465737473636F7270696F67726F75702E6E657429557365725F33386664353661362D366361612D343939332D393264642D383439633938613039393033B900000000000000000000%27",
  "value": [
        {
            "businessPhones": [],
            "displayName": "John Doe",
            "givenName": "John",
            "jobTitle": null,
            "mail": null,
            "mobilePhone": null,
            "officeLocation": null,
            "preferredLanguage": null,
            "surname": "Doe",
            "userPrincipalName": "jdoe@mycomp.net",
            "id": "c8f63ba1-5150-44c1-b456-468040f12345"
        }
  ]
}

我需要做什么才能为我的组织用户获取公司名称?

您所说的“组织”,是指管理单元还是在单独租户中的用户? - Marc LaFleur
我是指每个用户的公司名称字段。我曾经在旧的图形API中使用用户来获取它。但现在我无法获取它。 - Foramkumar Parekh
1
@ForamkumarParekh 如果你只想获取公司名称,可以使用beta graph api。通过调用https://graph.microsoft.com/beta/users/{userid},你将得到它。你可以在我的回答中看到响应。 - Tony Ju
@Tony,感谢你建议使用beta版,但这正是我想避免的,因为beta版可能会有一些改变,根据这些改变,我可能需要再次更新代码。所以我希望在V1.0中得到解决方案。无论如何,谢谢。beta版可以。你可以将其作为答案发布,我会接受它。 - Foramkumar Parekh
@ForamkumarParekh 谢谢。我已将此添加到答案中。此外,您可以在此处找到图形更改日志 https://learn.microsoft.com/en-us/graph/changelog?view=graph-rest-1.0#directory-apis-3 - Tony Ju
你不需要,也不应该使用这个测试版来完成。请参考下面的答案中的说明。 - Marc LaFleur
2个回答

3
user 资源默认情况下仅返回属性的子集。根据 文档

注意:获取用户仅返回默认属性集(businessPhones、displayName、givenName、id、jobTitle、mail、mobilePhone、officeLocation、preferredLanguage、surname、userPrincipalName)。使用 $select 获取用户对象的其他属性和关系。

换句话说,您需要向查询中添加一个列出要返回的属性的 $select 参数。例如,如果您想检索 iduserPrincipalNamecompanyName,则应使用:
https://graph.microsoft.com/v1.0/users?$select=displayName,id,jobTitle,companyName

完整的可用属性可以在用户资源类型文档中找到。

只有一个小细节不同,我注意到的是,由于某种原因 https://graph.microsoft.com/beta/users 返回了许多属性,包括 companyName,而 v1 只返回默认设置,除非你明确选择。这样做可以使代码更加合理,并消除之前讨论过的 beta 端点考虑。 - Rohit Saigal
如果您在查询参数中添加 $whatif=true,您会注意到 Beta 和 v1.0 之间的区别在于 v1.0 默认添加了 $select,而 beta 没有。 - Marc LaFleur

2
我希望能够从一个登录账户中获取所有用户的详细信息。
很抱歉,这是不可能的。获取组织详情的唯一方法是使用 https://graph.microsoft.com/v1.0/organization API。
您需要提供访问令牌来调用此API。在您的应用程序中,您将使用一个用户登录以获得访问令牌。
如果您在令牌请求URL中使用common,则会为该登录用户获取默认组织。
如果您在请求URL中使用特定租户,则会获取该租户的组织详情。
如果您只想获取用户的companyName,则可以调用 https://graph.microsoft.com/beta/users/{userid} 来获取它。
图片来源:https://istack.dev59.com/a32YY.webp

1
我有超过1个组织。我想知道哪个用户属于哪个组织。所以这个答案没有帮助。 - Foramkumar Parekh
1
如果您使用图形资源管理器调用此 API,则会获得创建此用户的默认组织。 如果您使用 https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token 获取访问令牌,则将获得有关您指定的租户 ID 的组织详细信息。 - Tony Ju
1
@ForamkumarParekh,您将只是一个组织的成员,而在另一个组织中则是访客。 - Tony Ju
感谢Tony的澄清。但我相信即使访问组织API,也可以提供已登录用户的默认组织。我想要从一个登录中获取所有用户的详细信息。我猜这个问题有些被误解了。让我这样向您说明, 我正在创建一个应用程序,在该应用程序中,用户在登录后可以访问其他用户的详细信息。 我需要列表中用户的组织详情。 - Foramkumar Parekh
你分享的知识很有帮助,但是并没有帮我得到我需要的东西。抱歉。 - Foramkumar Parekh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接