我正在构建一个电子邮件客户端,试图针对Graph API用户终结点执行搜索,类似于通过SOAP在Exchange Web服务中进行的搜索。
在带有ResolveNames的EWS中,服务器将仅从经过身份验证的用户的组织范围中返回详细信息(例如,职务,办公室,电话等),类似于从电子邮件客户端(即OWA)中搜索通讯录。
使用Graph API(基于我发现的是下一代O365电子邮件应用程序的推荐API),用户详细信息返回null
:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"businessPhones": [],
"displayName": "John Smith",
"givenName": "John",
"jobTitle": null,
"mail": "john@contoso.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": "Smith",
"userPrincipalName": "john@contoso.com",
"id": "xxxx"
}
我已请求以下范围:User.Read, User.ReadBasic.All, Calendars.Read, Calendars.ReadWrite, Calendars.Read.Shared, Calendars.ReadWrite.Shared, Contacts.Read, Contacts.Read.Shared, People.Read
我尝试了几次呼叫,但是仅向组织用户的一个简单请求就说明了这个问题:
https://graph.microsoft.com/v1.0/users
根据文档,此信息似乎只有在授予Directory.AccessAsUser.All
时才可见-这是管理员级别的范围,对于通用应用程序是禁止的/不切实际的。
是否可以使用Graph API在未经管理员同意的情况下使用有限的用户详细信息执行简单的通讯录搜索?如果没有,是否可以使用其他API或方法?或者,Microsoft是否计划扩展“用户”端点以包括此基本信息?
如果用户通过了身份验证,则允许通讯录\ GAL \用户搜索似乎很合适。
答案 0 :(得分:1)
User.ReadBasic.All
范围仅提供对(非双关语的)基本用户属性集的访问:
允许应用程序代表登录用户读取组织中其他用户的基本配置文件属性集。这包括显示名称,名字和姓氏,电子邮件地址,打开的扩展名和照片。还允许该应用读取已登录用户的完整个人资料。
为了阅读完整的用户属性集,您(至少)需要请求User.Read.All
:
允许该应用代表已登录的用户读取组织中其他用户的完整配置文件属性,报告和管理员。
这是一个比您提到的Directory.AccessAsUser.All
范围要严格得多的范围,但是它确实需要“管理员同意”,然后普通用户才能同意。没有解决“管理同意”先决条件的机制。