Поддерживается ли получение списка всех писем с личной учетной записью в Microsoft Graph? - PullRequest
0 голосов
/ 21 февраля 2020

Я создал приложение на портале Azure и предоставил разрешения на чтение данных пользователя и почты пользователя. Но я получаю 401 несанкционированную ошибку при попытке получить список писем.

В соответствии с делом c, разрешения, которые мне нужны для приложения: Mail.ReadBasi c .All, Mail.Read, Mail.ReadWrite. Я предоставил все это, но все еще получаю ошибку.

В do c не упоминается, поддерживается ли личная учетная запись для этого или нет в разрешении типа приложения.

/// get access token
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://login.microsoftonline.com/");

var stringContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("client_id", ClientID),
    new KeyValuePair<string, string>("scope", "https://graph.microsoft.com/.default"),
    new KeyValuePair<string, string>("client_secret", ClientSecret),
    new KeyValuePair<string, string>("grant_type", "client_credentials"),
});

var response = httpClient.PostAsync(TenantID + "/oauth2/v2.0/token", stringContent).GetAwaiter().GetResult().Content.ReadAsStringAsync().GetAwaiter().GetResult();
var auth_res_json = JObject.Parse(response);
var token = auth_res_json["access_token"].ToString();


/// now read user data
HttpClient httpClient2 = new HttpClient();
httpClient2.BaseAddress = new Uri("https://graph.microsoft.com/v1.0/");

httpClient2.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response2 = httpClient2.GetAsync("users/" + UserID + "/messages").GetAwaiter().GetResult();
var mails = JObject.Parse(response2.Content.ReadAsStringAsync().GetAwaiter().GetResult());

Обратите внимание, что я правильно получаю токен доступа, никаких проблем с этим нет. Кроме того, я могу получить пользовательские данные, используя httpClient2.GetAsync("users/" + UserID) правильно, ошибок тоже нет, и результаты хорошие.

Предоставленные мной разрешения:

Добавлены области:

enter image description here

И я добавил эти области в свое приложение:

enter image description here

1 Ответ

0 голосов
/ 21 февраля 2020

Разрешения на приложения принимаются администратором для всего арендатора, частью которого он является.
Учетные записи Microsoft не являются частью арендатора, и, насколько я знаю, у них нет способа дать согласие на приложение. разрешения для их единственной учетной записи.
Кроме того, когда вы вызываете конечную точку токена, вы предоставляете идентификатор арендатора, а не общий, это говорит конечной точке, что нужно генерировать только токены, действительные для этого арендатора.
Вы должны переключиться с делегированными разрешениями и в зависимости от того, что вы создаете, реализуйте поток кода устройства (нативные приложения) или поток имени (API).
Наконец, вам следует обратиться к библиотекам MSAL и Microsoft Graph SDK, это сэкономит вам много времени на реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...