.net Microsoft Graph获取其他用户的事件需要哪些权限

zbsbpyhn  于 2023-03-31  发布在  .NET
关注(0)|答案(1)|浏览(119)

使用下面的代码注入图形客户端:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection(nameof(configuration.AzureActiveDirectory)))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddMicrosoftGraph(Configuration.GetSection(nameof(configuration.MicrosoftGraph)))
.AddInMemoryTokenCaches();

我不明白我做错了什么。我需要通过图表获取另一个用户的事件
var events = await Graph.Users[Email].Calendars[calendarId].Events.Request().GetAsync();
这只适用于当前用户,但如果我尝试将其用于另一个用户,我会得到此错误:

Microsoft.Graph.ServiceException: Code: ErrorAccessDenied
Message: Access is denied. Check credentials and try again.
ClientRequestId: d1903ca9-1a96-4704-bc9c-35c01f557bf1

这里我的权限

怎么了?

3ks5zfa0

3ks5zfa01#

请添加Delegated API权限并重新测试(截图中Calendars.Read为Application类型),请等待几分钟后新添加的权限生效。

如果你不想添加其他权限,或者添加委托API权限仍然不起作用,那么恐怕你必须使用客户端凭证流来授权图形客户端。

using Microsoft.Graph;
using Azure.Identity;

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenant_name.onmicrosoft.com";
var clientId = "aad_app_id";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(
                tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var events = await graphClient .Users[Email].Calendars[calendarId].Events.Request().GetAsync();

相关问题