我正在使用Microsoft Graph Users API根据我们的ActiveDirectory验证用户名或电子邮件地址的列表。名称搜索:
https://graph.microsoft.com/v1.0/me/people/?$search=john.smith
返回其他数据,例如officeLocation
和jobTitle
。但是,如果我使用电子邮件搜索:
https://graph.microsoft.com/v1.0/users/john.smith@company.com
这些其他字段为空。我已在Azure中启用以下API权限:
我是否需要其他权限才能获取相同的数据?
更新:我按照下面的建议在https://developer.microsoft.com/en-us/graph/graph-explorer中进行了尝试,并且可以正常运行,但是Graph Explorer默认具有以下权限,无法禁用:
更新2:我正在使用Python 3.7,所以我从https://github.com/microsoftgraph/python-sample-console-app/blob/master/helpers.py#L25借来了device_flow_session()
。我从https://graph.microsoft.com/me/people/?$ search = John.Smith取回的数据如下:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")/people",
"value": [{
"id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"displayName": "John Smith",
"givenName": "John",
"surname": "Smith",
"birthday": "",
"personNotes": "",
"isFavorite": False,
"jobTitle": "Software Engineer",
"companyName": "Company",
"yomiCompany": "",
"department": "Fish",
"officeLocation": "London",
"profession": "",
"userPrincipalName": "John.Smith@company.com",
"imAddress": "sip:John.Smith@company.com",
"scoredEmailAddresses": [{
"address": "John.Smith@company.com",
"relevanceScore": -6.0991198031917175,
"selectionLikelihood": "notSpecified"
}
],
"phones": [],
"postalAddresses": [],
"websites": [],
"personType": {
"class": "Person",
"subclass": "OrganizationUser"
}
}
]
}
https://graph.microsoft.com/users/John.Smith@company.com中的数据为:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"businessPhones": [],
"displayName": "John Smith",
"givenName": "John",
"jobTitle": None,
"mail": "John.Smith@company.com",
"mobilePhone": None,
"officeLocation": None,
"preferredLanguage": None,
"surname": "Smith",
"userPrincipalName": "John.Smith@company.com",
"id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
答案 0 :(得分:1)
图中的每个“服务”(Active Directory,Exchange,SharePoint等)都对数据做出决策,以默认情况下在调用中返回。这些决定是最适合Microsoft运行服务的,而不一定是呼叫者需要的。 ;)建议添加$select
参数以指定所需的属性。
来自https://docs.microsoft.com/en-us/graph/query-parameters#select-parameter:
重要提示:通常,我们建议您使用$ select来限制 查询返回给应用所需的属性。这是 尤其是对于可能返回较大值的查询 结果集。限制每一行中返回的属性将减少 网络负载并帮助改善应用程序的性能。
在v1.0中,一些从directoryObject派生的Azure AD资源, 如用户和组,返回一个有限的默认属性子集 读。对于这些资源,必须使用$ select返回属性 超出默认设置。
答案 1 :(得分:1)
根据我的测试,我发现这两个API所获得的信息来自不同的地方。
从/me/people
返回的“ officeLocation”似乎已在SharePoint中维护。您可以登录https://apc.delve.office.com/?u=3df5295a-e4b1-46fe-8969-e715ccd11077&v=editprofile进行检查。
从/me
或/users/{id | userPrincipalName}
返回的“ officeLocation”在Azure AD中维护。因此,您可以在Azure AD->用户中对其进行检查。
在Azure AD中更新“ Office”后,将使用两个终结点进行查询。但是他们给了我两个不同的结果。一个(/me/people
)很旧,另一个(/users/{id | userPrincipalName}
)很新。可能需要一些时间才能同步。也许他们不会同步。
我也在Microsoft Graph Explorer中对其进行了测试。而且“ officeLocation”也不同。因此,我不确定Microsoft Graph Explorer为什么适合您。但是您可以将其与我的想法一起挖掘。
我希望我的发现对您有帮助。