Как получить доступ к общему почтовому ящику с помощью Microsoft Graph в .net core - PullRequest
0 голосов
/ 15 января 2019

У меня есть приложение, которое может получить доступ к моему почтовому ящику. Я создал приложение, следуя этому руководству:

https://docs.microsoft.com/en-us/graph/tutorials/aspnet?tutorial-step=1

Затем я адаптировал приложение для чтения почты. Это прекрасно работает для моей собственной почты. Однако мне нужно получить доступ к общему почтовому ящику, к которому у меня есть доступ, и я могу читать электронные письма в моем внешнем виде.

Я попытался сделать это, используя следующий код:

public static async Task<IEnumerable<Message>> GetMailAsync()
        {
            var graphClient = GetAuthenticatedClient();


            var mail = await graphClient.Users["usersemail@somewhere.com"].MailFolders.Inbox.Messages.Request()
                .GetAsync();

            return mail;
        }

Однако я получаю несанкционированную ошибку:

ошибка авторизации Вот мой код авторизации:

private static GraphServiceClient GetAuthenticatedClient()
        {
            return new GraphServiceClient(
                new DelegateAuthenticationProvider(
                    async (requestMessage) =>
                    {
                        // Get the signed in user's id and create a token cache
                        string signedInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
                        HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);
                        TokenCache tokenStore = new SessionTokenStore(signedInUserId,
                            httpContext).GetMsalCacheInstance();

                        var idClient = new ConfidentialClientApplication(
                            appId, redirectUri, new ClientCredential(appSecret),
                            tokenStore, null);

                        var accounts = await idClient.GetAccountsAsync();

                        // By calling this here, the token can be refreshed
                        // if it's expired right before the Graph call is made
                        var result = await idClient.AcquireTokenSilentAsync(
                                    graphScopes.Split(' '), accounts.FirstOrDefault());

                        requestMessage.Headers.Authorization =
                            new AuthenticationHeaderValue("Bearer", result.AccessToken);
                    }));
        }

Я добавил разрешения в приложении Изображение разрешений приложения

Может кто-нибудь заметить, что я здесь делаю неправильно? Некоторые сообщения говорят, что это невозможно сделать таким образом ( Microsoft Graph API .NET не может читать общую почту , Microsoft Graph API SDK .NET Проблемы с получением писем других пользователей ), но Я могу заставить его работать в графическом обозревателе.

Любая помощь приветствуется, включая советы по улучшению моих вопросов.

1 Ответ

0 голосов
/ 16 января 2019

Нашел проблему, я не правильно установил appSettings.

Я добавил «User.Read Mail.Read.Shared» в свой PrivateSettings.Config, как показано:

   <add key="ida:AppScopes" value="User.Read Calendars.Read" />
<add key="ida:AppScopes" value="User.Read Mail.Read" />
<add key="ida:AppScopes" value="User.Read Mail.Read.Shared" />

Надеюсь, это кому-нибудь поможет.

...