Как получить доступ к почтовому ящику с разрешением для приложения с помощью MS Graph Api - PullRequest
0 голосов
/ 13 июня 2019

Я хочу использовать Graph Api для доступа к почтовому ящику o365 для обработки входящих писем. Без входа в систему (разрешение приложения).

с этим я могу получить токен доступа, но не могу получить доступ к входящей почте. и код следующим образом.

//Defining app
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
            .WithClientSecret(config.ClientSecret)
            .WithAuthority(new Uri(config.Authority))
            .Build();


//Getting access token
result = await app.AcquireTokenForClient(scopes)
                .ExecuteAsync();
//graph service client
GraphServiceClient graphClient = new GraphServiceClient(new
DelegateAuthenticationProvider(async (requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", result.AccessToken);
            }));
//accessing Ms graph api 
var messages = await graphClient.Me.Messages
                                .Request()
                                .Select(e => new {
                                    e.Sender,
                                    e.Subject
                                })
                                .GetAsync();

Код: BadRequest Сообщение: текущий аутентифицированный контекст недопустим для этого запроса. Это происходит, когда запрос сделан к конечной точке, которая требует входа пользователя. Например, для / me требуется зарегистрированный пользователь. Получите токен от имени пользователя для отправки запросов к этим конечным точкам. Используйте поток кода авторизации OAuth 2.0 для мобильных и собственных приложений и неявный поток OAuth 2.0 для одностраничных веб-приложений.

Внутренняя ошибка

Я не знаю, что я делаю не так, пожалуйста, помогите мне

1 Ответ

2 голосов
/ 13 июня 2019

Вы не можете использовать .Me, поскольку нет аутентифицированного пользователя. Вместо этого вам нужно сделать что-то вроде:

//accessing Ms graph api 
var messages = await graphClient.Users["user-id"].Messages
                                .Request()
                                .Select(e => new {
                                    e.Sender,
                                    e.Subject
                                })
                                .GetAsync();

Где user-id - это либо id пользователя из Graph, либо его UPN (обычно это адрес электронной почты).

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