Azure AD企业应用调用Microsoft Graph API无法访问SharePoint私有站点
问题根因
你为企业应用分配的租户级Sites.ReadWrite.AllMicrosoft Graph应用权限,默认仅支持访问组织内的公开站点,私有站点需要单独为该企业应用(服务主体)授予站点级权限才可访问。
SharePoint前台的「添加成员」面板默认不支持搜索服务主体对象,因此无法通过该路径直接添加企业应用权限。
配置步骤
方法一:通过PnP PowerShell配置(推荐)
- 本地安装PnP PowerShell模块,以管理员身份运行PowerShell执行命令:
Install-Module -Name PnP.PowerShell -Force
- 连接到需要授权的私有SharePoint站点,使用SharePoint全局管理员或站点集管理员账号完成身份验证:
Connect-PnPOnline -Url https://<你的租户前缀>.sharepoint.com/sites/<私有站点路径> -Interactive
- 为企业应用授予站点权限,权限可选值为
Read(只读)、Write(读写)、FullControl(完全控制),按需选择即可:
Grant-PnPAzureADAppSitePermission -AppId "<你的企业应用ID>" -DisplayName "<你的企业应用名称>" -Permissions Write
方法二:通过Microsoft Graph API配置
如果不方便安装PowerShell模块,可直接调用Graph API完成配置:
- 为用于调用配置接口的账号或应用授予
Sites.FullControl.All应用权限并完成管理员同意。 - 调用POST接口,接口地址为
https://graph.microsoft.com/v1.0/sites/<目标私有站点ID>/permissions,请求体如下:
{ "roles": ["write"], "grantedToIdentities": [{ "application": { "id": "<你的企业应用ID>", "displayName": "<你的企业应用名称>" } }] }
验证与注意事项
- 权限配置完成后最多等待15分钟生效,再调用原站点查询接口即可正常返回结果,不再出现
Requested site could not be found错误。 - 站点级权限仅针对当前配置的私有站点生效,符合最小权限安全原则,不建议为企业应用授予租户级
Sites.FullControl.All全量权限。 - 可执行
Get-PnPAzureADAppSitePermission命令查看当前站点已配置的应用权限,验证配置是否生效。
内容的提问来源于stack exchange,提问作者Grégoire Thibaud
相关产品推荐
相关产品推荐

