如何通过Microsoft Graph获取用户拥有的所有SharePoint站点?
你之前使用的 https://graph.microsoft.com/v1.0/sites/microsoft.graph.getAllSites() 方法并不适配你的需求:这个函数用于返回租户内所有站点(需要 Sites.FullControl.All 这类高权限),且不支持直接传入用户标识筛选所有者,所以结果自然不符合预期。
以下是正确的实现方案:
核心查询逻辑
通过 sites 端点结合 $filter 筛选所有者包含目标用户的站点,支持用用户ID、用户主体名(邮箱)作为筛选条件:
1. 按用户ID筛选
GET https://graph.microsoft.com/v1.0/sites?$filter=owners/any(o: o/id eq '{user-id}')&$select=id,name,webUrl
2. 按用户邮箱(用户主体名)筛选
GET https://graph.microsoft.com/v1.0/sites?$filter=owners/any(o: o/userPrincipalName eq '{user-email}')&$select=id,name,webUrl
参数说明
- 将
{user-id}替换为目标用户的Azure AD ID(推荐使用ID,比用户名/邮箱更稳定) - 将
{user-email}替换为用户的完整邮箱(如john.doe@contoso.com) $select=id,name,webUrl用于指定返回的站点字段,可根据需求添加或移除(如description、createdDateTime等)- 若需要同时返回站点的所有者信息,可追加
$expand=owners参数
权限要求
必须确保你的应用或委派权限包含以下至少一项:
Sites.Read.All(只读权限,最低要求)Sites.ReadWrite.All(读写权限)- 应用权限需要管理员提前同意
额外说明
- 如果需要获取用户作为站点集管理员的站点(范围比所有者更窄,仅站点集级别的管理员),可使用以下端点:
GET https://graph.microsoft.com/v1.0/users/{user-id}/sites/siteCollectionsAsAdmin - 若结果数量较多,Microsoft Graph会返回分页数据,需通过响应中的
@odata.nextLink继续获取后续结果
内容的提问来源于stack exchange,提问作者Vinícius Martins
相关产品推荐
相关产品推荐

