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

Graph API权限异常:可读取列表列但无法读取列表项

问题描述

我可以通过Graph API的GET请求/v1.0/sites/{siteId}/lists/{listId}/columns查询列表列,但执行GET请求/v1.0/sites/{siteId}/lists/{listId}/items读取列表项时返回空数组(也尝试过追加?expand=fields(select=fieldName),其中fieldName为列查询返回的字段名),返回结果如下:

{
   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('{siteId}')/lists('{listId}')/items",
   "value": []
}

尝试通过POST请求创建行时收到访问拒绝提示。我使用SoapUI发送REST请求,应用拥有Sites.Selected API权限,且已通过链接https://{domain}.sharepoint.com/sites/{siteName}/_layouts/15/appinv.aspx为目标站点分配权限。根据文档说明,读取列和列表项所需权限相同(即Sites.Read.All),请问为何会出现该异常情况?

解决方案

以下是针对该问题的排查和解决步骤:

1. 检查站点权限配置的粒度与权限类型

通过appinv.aspx分配权限时,权限的作用范围和权限级别是核心问题:

  • 如果仅给应用分配了站点级(http://sharepoint/content/sitecollection/web)的Read权限,可能无法正常读取列表项(尤其是当列表权限继承被修改时),更无法创建项。
  • 需确保权限XML针对目标列表配置了合适的权限:
    • 若仅需读取列表项,使用:
      <AppPermissionRequests AllowAppOnlyPolicy="true">
        <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list/{listId}" Right="Read" />
      </AppPermissionRequests>
      
    • 若需要创建项,需将Right改为Write或FullControl。

2. 验证应用的实际有效权限

使用Graph API的应用身份调用以下端点,确认应用对目标列表的权限:

  • 查询列表的有效权限:
    GET /v1.0/sites/{siteId}/lists/{listId}/effectivePermissions
    
    检查返回结果中是否包含Read(读取项)或Write(创建项)权限标识。

3. 排除列表本身的问题

  • 确认目标列表实际存在列表项:手动登录SharePoint站点,检查该列表是否有数据,避免因列表为空导致返回空数组。
  • 核对siteId和listId的正确性:确保读取列表项时使用的ID与读取列时完全一致,避免误操作其他空列表。
  • 检查列表权限继承:若列表或部分列表项的权限未继承站点权限,需单独给应用分配对应列表项的访问权限。

4. 确认Sites.Selected权限的配置逻辑

Sites.Selected权限要求两个条件同时满足:

  • 应用必须在Azure AD中被授予Sites.Selected(Delegated或Application类型)权限。
  • 必须通过appinv.aspx或Graph API给目标站点/列表分配具体权限。
    若仅配置了其中一项,会导致权限不足的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:33:31