如何从Sharepoint DriveItem权限中解析出邮箱地址?
你在/groups端点查不到这些组是正常的,这些都是SharePoint站点级别的本地组,不属于Azure AD范畴,/groups接口仅返回Azure AD中存储的Microsoft 365组、安全组、通讯组等,不包含SharePoint站点本地组。
以下是获取特定文件所有有权限访问用户的完整方案:
操作步骤
- 拆分权限主体类型
调用https://graph.microsoft.com/v1.0/sites/<site id>/drives/<drive id>/items/<item id>/permissions接口后,对返回的权限条目分两类处理:- 直接授权的AAD用户:若
grantedTo.user字段包含email属性,可直接提取该邮箱作为有效权限用户。 - SharePoint站点组:若存在
grantedToV2.siteGroup字段,或显示名称为站点默认的所有者/成员/访问者组,属于站点本地组,需要单独查询组内成员。
- 直接授权的AAD用户:若
- 查询站点组的成员列表
对于站点组类型的权限主体,使用如下接口查询组内所有用户:
其中https://graph.microsoft.com/v1.0/sites/<site id>/groups/<site group id>/members<site group id>可从grantedToV2.siteGroup.id字段获取,返回结果会直接包含组内所有用户的邮箱、ID、显示名等信息。 - 获取站点默认内置组的ID
你示例中出现的testsite - Eigenaars(站点所有者)、testsite - Bezoekers(站点访问者)、testsite - Leden(站点成员)是站点默认内置组,可先调用如下接口获取站点所有本地组的ID和名称映射:
匹配显示名称即可拿到内置组的ID,再按上一步的方式查询组成员。https://graph.microsoft.com/v1.0/sites/<site id>/groups
补充说明
- 如果需要完整的权限清单,可判断
inheritedFrom字段是否为空,非空则说明权限继承自上层文件夹/文档库/站点,可按需递归查询父级资源的权限。 - 确保你使用的访问令牌拥有
Sites.Read.All或更高的SharePoint相关权限,否则查询站点组成员时可能返回无权限或空结果。
内容的提问来源于stack exchange,提问作者Stijn Tratsaert
相关产品推荐
相关产品推荐

