调用Microsoft Graph API时如何获取组织用户的公司名称?
嘿,这个场景我太熟悉了!默认情况下,Microsoft Graph API的/users端点只会返回一组预设的基础用户字段,companyName并不在这个默认列表里,所以你得主动告诉API你要获取这个字段才行。下面是具体的解决步骤:
显式指定需要返回的字段
在你的请求里加上$select参数,把companyName和你需要的其他字段都列进去。比如修改后的请求URL应该是这样的:https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'jo')&$select=displayName,userPrincipalName,id,companyName,businessPhones,givenName,surname这样API就会返回你指定的所有字段,包括公司名称了。
确认权限配置正确
要读取组织内用户的companyName信息,你的应用需要拥有对应的权限:- 如果你是用委托权限(用户登录后访问):需要
User.Read.All权限,并且当前登录用户要有查看其他用户信息的权限; - 如果你是用应用权限(后台服务访问):需要
Directory.Read.All权限,并且已经完成了管理员同意。
要是权限不够,API可能会返回权限错误,或者即使返回结果也会缺失敏感字段。
- 如果你是用委托权限(用户登录后访问):需要
检查AD中用户的companyName字段是否有值
最后别忘了确认一下,你要查询的用户在Azure AD里的companyName字段确实是填充了内容的。如果这个字段本身是空的,哪怕你请求了,API也不会返回这个字段哦。
举个修改请求后的返回示例(假设公司名称已填充):
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(displayName,userPrincipalName,id,companyName)",
"value": [
{
"displayName": "John Doe",
"userPrincipalName": "jdoe@mycomp.net",
"id": "c8f63ba1-5150-44c1-b456-468040f12345",
"companyName": "My Company Inc."
}
]
}
内容的提问来源于stack exchange,提问作者Foramkumar Parekh

