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

Azure Function调用Graph API访问SharePoint Online认证报错:缺少scp/roles声明

解决Graph API调用SharePoint列表时的"Either scp or roles claim need to be present in the token"错误

以下是针对该错误的排查和解决步骤:

  • 确认应用权限已完成管理员授权
    登录Azure AD应用注册后台,进入目标应用的「权限」页面,检查Sites.Selected权限的状态是否为「已授予[你的租户名称]管理员同意」。如果状态显示「需要管理员同意」,说明权限未被批准,需重新发起管理员同意流程并完成授权。

  • 为应用分配目标站点/列表的具体权限
    Sites.Selected属于细粒度应用权限,仅在Azure AD中添加权限还不够,必须显式授予应用对目标SharePoint站点或列表的访问权限:

    1. 从Azure AD应用注册的「概述」页面获取应用的对象ID(服务主体ID)。
    2. 使用Graph API授予站点权限(需管理员权限执行):
      POST https://graph.microsoft.com/v1.0/sites/{site-id}/permissions
      Content-Type: application/json
      {
        "roles": ["write"], // 根据需求替换为"read"或其他权限
        "grantedToIdentities": [{
          "application": {
            "id": "你的应用对象ID",
            "displayName": "你的应用名称"
          }
        }]
      }
      
    3. 若仅需列表级权限,可替换为列表权限授予请求:
      POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/permissions
      Content-Type: application/json
      {
        "roles": ["write"],
        "grantedToIdentities": [{
          "application": {
            "id": "你的应用对象ID",
            "displayName": "你的应用名称"
          }
        }]
      }
      
  • 验证Token权限声明
    解码应用获取到的JWT Token,检查是否包含roles声明,且声明中包含对应权限(如Sites.Selected相关权限)。可使用离线JWT解码工具完成验证,确保Token已正确携带权限信息。

  • 检查代码参数正确性
    确认代码中的tenantId、clientId、clientSecret无拼写错误;同时验证site-id和list-id格式正确(站点ID可采用域名,站点GUID,webGUID格式,或域名:/sites/站点路径的形式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:05:19