我们的应用程序有一个客户端注册,该客户端具有访问特定 SharePoint 网站的权限,这些权限是使用以下文章中描述的sites.selected 方法授予的。我们的应用程序被分配了该站点的“写入”角色。
我们可以检索用于应用程序注册的令牌。但是,它不包含角色或 scp 声明,当我们尝试调用以查看站点上的列表或驱动器时,我们会收到一条错误通知。
我们做错了什么吗? site.selected 权限是否不会扩展到列表或云端硬盘?
(我们只计划将驱动器调用用作一次性操作,因此如果不支持这一点,我们可能可以解决这个问题。我们的要求是在指定站点上读取和写入文件。)
更新:我认为问题是为 SharePoint API 而不是 Graph API 授予了权限。
如果在调用 Graph API 请求时访问令牌没有与 Microsoft Graph 相关的权限,通常会发生该错误。
当我尝试使用没有 Graph API 权限的令牌列出站点中的驱动器时,我也遇到了同样的错误,如下所示:
GET https://graph.microsoft.com/v1.0/sites/siteId/drives
回复:
要解决该错误,请确保在应用程序注册中授予 Application 类型的 Microsoft Graph API 权限:
现在,我通过 Postman 使用客户端凭据流再次生成了 访问令牌:
POST https://login.microsoftonline.com/tenantId/oauth2/v2.0/token
grant_type:client_credentials
client_id: appId
client_secret: secret
scope: https://graph.microsoft.com/.default
回复:
要确认这一点,您可以在 jwt.ms 网站中解码访问令牌并检查
roles
声明是否具有 有效 权限:
当我使用此令牌在 SharePoint 站点中列出驱动器时,我成功收到了响应,如下所示:
GET https://graph.microsoft.com/v1.0/sites/siteId/drives
回复: