You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Graph API /sites接口对Azure AD外部来宾用户调用报错itemNotFound

问题描述
  • 调用Graph API识别指定用户拥有访问权限的SharePoint站点时,面向内部用户执行操作可正常返回结果,针对已添加至Azure AD的外部来宾用户执行相同操作时,会返回itemNotFound错误。
  • 已通过Graph Explorer做同场景测试,返回完全一致的报错,错误返回内容如下:
{
  "error": {
    "code": "itemNotFound",
    "message": "Item not found",
    "innerError": {
      "date": "2022-06-20T16:28:01",
      "request-id": "cde68280-5538-40c3-af60-6602bd7c1214",
      "client-request-id": "ef1f7a56-caf4-e1f2-b2b0-57577fa96f03"
    }
  }
}
问题原因

这个报错不是代码编写错误或者普通权限配置遗漏导致的,是Graph API与SharePoint Online针对来宾用户的默认机制限制:

  • 如果你调用的是/users/{id}/followedSites、/me/followedSites这类查询关注站点的接口,这类接口从设计层面就不支持Azure AD B2B来宾用户:来宾账号默认不会在租户的个人站点、关注站点索引池中创建对应条目,查询时自然会返回资源不存在的错误,哪怕给来宾账号分配全局管理员权限也不会改变这个结果,这也是Graph Explorer测试复现相同报错的核心原因。
  • 如果你调用的是通用站点枚举接口,触发报错的原因是SharePoint Online默认开启了来宾用户范围限制,来宾账号不会被纳入租户级的站点权限枚举范围,哪怕账号实际拥有对应站点的访问权限,直接枚举也无法查到对应资源。
可行解决方案

根据实际调用场景选择对应方案即可:

  • 如果场景是来宾用户自身调用接口查询自己可访问的站点:直接弃用followedSites类接口,改用Microsoft Graph搜索接口查询站点资源,搜索接口会自动按照调用者的权限做结果裁剪,对来宾用户正常生效,参考调用格式:
POST /v1.0/search/query
Content-Type: application/json

{
  "requests": [
    {
      "entityTypes": ["site"],
      "query": {
        "queryString": "contentclass:STS_Site"
      }
    }
  ]
}
  • 如果场景是服务端通过应用权限代查指定来宾用户的可访问站点:先到SharePoint管理中心关闭来宾用户的受限范围访问开关,给调用应用授予Sites.Read.All、Directory.Read.All应用权限后,再通过搜索接口指定用户安全描述符做权限裁剪查询即可。
  • 注意不要做无效排查:给来宾账号提升站点权限、给Graph API分配更高的委派权限都无法解决followedSites接口对来宾不生效的问题,这是接口层面的设计限制,不是普通权限配置问题。

内容的提问来源于stack exchange,提问作者Sachin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:51:20