使用 App Only 权限调用 Graph API 站点时接收访问拒绝?search=*

问题描述

我有一个 Web 应用程序,它使用仅应用程序令牌来覆盖最终用户检索租户中所有网站集的权限。尝试使用 the example 中提供的样板代码并稍作更改时,Graph API 在尝试发出调用 accessDenied 时返回 https://graph.microsoft.com/v1.0/sites?search=*。如果我删除 WithAppOnly(),则调用成功[如果已分配 Sites.Read.All 的委派权限]。已向 Azure AD 注册应用分配了管理员批准的应用范围 Sites.Read.All

            var queryOptions = new List<QueryOption>()
            {
                new QueryOption("search","*")
            };

            var sites = await graphServiceClient.Sites.Request(queryOptions)
                .WithAppOnly()
                .WithScopes("Sites.Read.All")
                .GetAsync();
ServiceException: Code: accessDenied
Message: Access denied
Inner error:
AdditionalData:
date: 2021-03-20T21:45:27
request-id: 16933bd6-5e7f-4820-9563-fec75575c9b2
client-request-id: 16933bd6-5e7f-4820-9563-fec75575c9b2
ClientRequestId: 16933bd6-5e7f-4820-9563-fec75575c9b2

解决方法

您需要在 Azure 门户中添加 应用程序Sites.Read.All 权限。 enter image description here

注意:点击 enter image description here,因为此权限需要管理员同意。

尝试使用 client credentials flow 进行测试。

// Get access token
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

client_id={client_id}
&scope=https://graph.microsoft.com/.default
&client_secret={client_secret}
&grant_type=client_credentials

// Call MS Graph API
GET https://graph.microsoft.com/v1.0/sites?search={query}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...