Azure Function调用Graph API访问SharePoint Online认证报错:缺少scp/roles声明
以下是针对该错误的排查和解决步骤:
确认应用权限已完成管理员授权
登录Azure AD应用注册后台,进入目标应用的「权限」页面,检查Sites.Selected权限的状态是否为「已授予[你的租户名称]管理员同意」。如果状态显示「需要管理员同意」,说明权限未被批准,需重新发起管理员同意流程并完成授权。为应用分配目标站点/列表的具体权限
Sites.Selected属于细粒度应用权限,仅在Azure AD中添加权限还不够,必须显式授予应用对目标SharePoint站点或列表的访问权限:- 从Azure AD应用注册的「概述」页面获取应用的对象ID(服务主体ID)。
- 使用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": "你的应用名称" } }] } - 若仅需列表级权限,可替换为列表权限授予请求:
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
相关产品推荐
相关产品推荐

