Я пытаюсь создать демон, используя Microsoft Graph API v1.0. Я зарегистрировал свое приложение с разрешениями приложения Calendars.ReadWrite и User.Read.All с предоставленным согласием администратора. Я правильно получаю токен доступа и вызываю GetUserId, который возвращает идентификатор пользователя для установки requestURI. После этого я хочу получить календарь Outlook:
var id = await GetUserId(result.AccessToken);
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
String requestURI = $"https://graph.microsoft.com/v1.0/users/{id}/calendars";
var response = await httpClient.GetAsync(requestURI);
var responseString = await response.Content.ReadAsStringAsync();
, но получаю эту ошибку:
{
"error": {
"code": "ResourceNotFound",
"message": "Resource could not be discovered.",
"innerError": {
"request-id": "5ecd547b-9281-4824-94e5-095691e759aa",
"date": "2020-01-14T16:44:16"
}
}
}
Когда я устанавливаю requestURI
в users/{id}
или organization
, запрос работает хорошо, но добавление /calendars
, /events
или /mailFolder
приводит к вышеуказанной ошибке.
Мне кажется, моя проблема в том, что я использовал Личный кабинет. Нужно ли использовать рабочий или школьный аккаунт? Можно ли использовать Личный кабинет? Есть ли другая причина моей ошибки?
Обновление: код для получения токена:
app = ConfidentialClientApplicationBuilder
.Create(ClientId)
.WithClientSecret(ClientSecret)
.WithAuthority($"https://login.microsoftonline.com/{TenantId}/oauth2/v2.0/token&grant_type=client_credentials&resource=https://graph.microsoft.com")
.Build();
string[] scopesClient =
new string[] { $"https://graph.microsoft.com/.default" };
AuthenticationResult result = null;
try
{
result = await app.AcquireTokenForClient(scopesClient).ExecuteAsync();
}
catch (MsalServiceException ex) when(ex.Message.Contains("AADSTS70011"))
{
}