Ms Graph прочитанные сообщения выдает ErrorAccesDenied - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь прочитать мои сообщения с GraphClient, используя InteractiveAuthenticationProvider из пространства имен Microsoft.Graph.Auth
с PublicClientApplication от Microsoft.Identity.Client.

Это дает мне код: ErrorAccesDenied
Сообщение: в доступе отказано. Проверьте учетные данные и повторите попытку.
Как только я позвоню .Результат


strin userId = <User Id>
var redirectUri = "http://localhost";
string clientId = <Client ID>
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };

var app = PublicClientApplicationBuilder.Create(clientId)
                                        .WithRedirectUri(redirectUri)
                                        .Build();

var authentication = new InteractiveAuthenticationProvider(app, scopes);
var client = new GraphServiceClient(authentication);
var messages = client.Users[userId].Messages.Request().GetAsync().Result; // <- Error Here Because of the .Result

Я поместил все возможные области в свое разрешение приложения: User.Read, User.Read.All , Mail.Read, MailboxSettings.Read ... для приложения и делегированных разрешений. И все они получили согласие администратора.
Кроме того, когда я не использую атрибут Message в моем запросе, он работает нормально.

Затем я попытался добавить метод WithAuthority () с tenantId. Таким образом, строка стала такой.

string tenantId = <Tenant Id>
var app = PublicClientApplicationBuilder.Create(clientId)
                                            .WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
                                            .WithRedirectUri(redirectUri)
                                            .Build();

Затем, как только я позвонил. Результат дал мне другую ошибку.
Код: OrganisationFromTenantGuidNotFound
Сообщение: арендатор для руководства арендатора "Идентификатор клиента "не существует
Но это также работает, когда я не помещаю атрибут сообщения. Поэтому мне интересно, как я могу использовать атрибут «Сообщение», чтобы читать мои сообщения, спасибо.

1 Ответ

0 голосов
/ 20 апреля 2020

Для этого Получить сообщение API , необходимое разрешение на делегирование Mail.ReadBasic, Mail.Read, а разрешение приложения Mail.ReadBasic.All, Mail.Read.

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenantId)
            .Build();

InteractiveAuthenticationProvider authProvider = new InteractiveAuthenticationProvider(publicClientApplication, scopes);
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var message = await graphClient.Me.Messages.Request().GetAsync();

Вот пример об интерактивной аутентификации, на которую вы могли бы ссылаться.

...