已实现SharePoint站点级授权,如何通过Graph API仅授权特定文档库?
我正在使用sites.Selected范围处理SharePoint细粒度权限,通过Graph API为应用授予访问角色。当需要让应用操作站点内所有列表/驱动器时,这种方式运行正常。示例调用为:POST https://graph.microsoft.com/v1.0/sites/{site-Id}/Permissions
请求负载如下:
{ "roles": [ "write" ], "grantedToIdentitiesV2": [ { "application": { "id": "<<App Id>>", "displayName": "TestDaemonGraphAPI" } } ] }
但我需要限制应用仅访问部分驱动器/文档库,目前在站点级别设置权限会让应用能访问所有驱动器,请问如何通过Graph API仅为特定驱动器/库授予访问权限?
更新尝试及错误
我尝试直接在驱动器级别授予权限,但操作失败,错误详情如下:
状态码:404
错误类型:ResourceNotFound
错误消息:找不到与分段“permissions”对应的资源。
请求ID:[请求ID]
日期:[错误发生日期]
要给特定驱动器(文档库)授予应用权限,不能直接对drive资源调用permissions端点——Graph API目前不支持直接在驱动器级别为应用授予sites.Selected范围的权限。正确做法是针对文档库对应的列表设置权限,因为SharePoint中的文档库本质是特殊类型的列表:
获取目标文档库的列表ID
调用接口筛选出目标文档库对应的列表,获取其id:GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists?$filter=displayName eq '目标文档库名称'为该列表授予应用权限
使用列表的permissions端点发送POST请求,请求格式与站点级权限配置类似:POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/Permissions
请求负载:{ "roles": ["write"], // 可根据需求替换为read等权限 "grantedToIdentitiesV2": [ { "application": { "id": "<<你的应用ID>>", "displayName": "TestDaemonGraphAPI" } } ] }验证权限效果
配置完成后,应用将仅能访问已授权的文档库对应的驱动器,未授权的驱动器会返回权限错误。
注意:确保应用已配置sites.Selected应用权限,且完成了管理员授权(admin consent)。
内容的提问来源于stack exchange,提问作者Ramesh Chinnappan

