0

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

            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
4

1 回答 1

0

您需要在 Azure 门户中 添加Sites.Read.All应用程序权限。在此处输入图像描述

注意:单击在此处输入图像描述,因为此权限需要管理员同意。

尝试使用客户端凭据流进行测试。

// 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}
于 2021-03-22T08:55:45.343 回答